之前一直在看黑马程序员的Java教程,平时记录也就是把视频中的ppt截图存放。但是时间久了发现之前很多内容都没有记牢,熟用。现在改用文字记录总结平时学习到的内容,同时学会熟练使用MarkDown写法。Java官方API文档。
格式:
Date类位于util包内,用于操作时间。
格式:
方法:
格式:
实例:
// 格式化时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss Ea");
//获取当前时间
String nowTime = "2022年05月19日 21:10:53 星期六 上午";
//将格式化后的时间转换为日期对象
Date d = sdf.parse(nowTime);
//获得日期对象的毫秒数
Long time = d.getTime();
//经过1天2小时2分钟2秒
Long time2 = time + (24*3600+2*3600+2*60+2)*1000;
//将时间格式化
System.out.println(sdf.format(time2));
Calendar是一个抽象类,不能直接创建对象。
方法:
方法:
简化函数式接口(接口中有且仅有一个抽象方法,通常加@FunctionalInterface注解)匿名内部类的代码写法
格式:
实例:
public class LambdaDemo1 {
public static void main(String[] args) {
run( () ->{
System.out.println("放飞");
});
}
public static void run(Play p){
p.fly();
}
}
@FunctionalInterface
interface Play{
void fly();
}
格式:
作用:
拓展:
格式:
Iterator iterator()返回迭代器对象
方法:
格式:
for(元素数据类型 变量名:可迭代对象){
该变量就是元素
}
格式:数据类型…参数名称(本质是一个数组)
方法:
元素有序、可重复、有索引
哈希值:JDK根据对象的地址,按照规则算出来的int类型的数值。hashCode()方法返回对象哈希值
元素无序、不重复、无索引
作用:
Collections不属于集合,使用来操作集合的工具类
方法:
格式: Map<数据类型,数据类型> maps = new Map<>()
键值对应key=value,无序不重复,无索引
方法:
Stream操作集合或数组首先要得到stream流,再使用流的功能
通过Collection接口中stream方法实现
方法:
实例1:
##去除最高工资和最低,计算平均
list1.stream().sorted((e1,e2) -> Ddouble.compare(e1.getSalary(),e2.getSalary)).skip(1).limit(list1.size()-1).forEach(e ->{
allMoney += (e.getSalary());
});
averageMoney /= allMoney(list1.size()-2);
实例2:
Stream<String> s1 = list.stream().filter(s -> s.startsWith("王"));
List<String> wangList = s1.collect(Collectors.toList());
格式:
try{
//监视可能出现异常的代码
}catch(异常类型 变量){
//异常处理
}Finally{
}
或者方法直接将异常通过throws抛出给调用者
规范接口:Commons Logging(JCL)
实现框架:Log4j、JUL(java.util.loggiing)、Logback
基于slf4j的日志规范实现的框架
技术模块:
TRACE < DEBUG < INFO < WARN < ERROR(默认基本为debug)
位于java.io.File下用于文件操作
方法:
public File(String pathname)方法
File f1 = new File(“D:/blog/myblog/data.txt”)
方法:
实例:
//递归找文件
public static void searchFile(File dir,String fileName){
if(dir != null && dir.isDirectorry()){
File[] files = dir.listFiles()
if(files != null && files.length>0){
for(File file : files){
if(file.isFile()){
if(file.getNmae().contains(fileName)){
System.out.println("找到了"+file.getAbsolutePath());
}
}else{
searchFile(file,fileName);
}
}
}
}else{
System.out.println("当前搜索的位置不是文件夹");
}
}
IDE默认字符集进行编码(UTF-8方式)
byte[] bytes = name.getBytes(“GBK”);//指定GBK编码方式
作用:
以内存为基准,把磁盘文件中的数据以字节形式读取到内存中
方法:
File f = new File("Delete/src/data.txt");
InputStream is = new FileInputStream(f);//或者直接将f换成路径
byte[] buffer = new byte[(int)f.length()];
System.out.println(new String(buffer));
作用:
以内存为基准,把内存中的数据以字节形式写出到磁盘文件中去的流
方法:
作用:
以内存为基准,把磁盘文件中的数据以字符形式读取到内存中
方法:
Reader fr = FileReader("Delete/src/data.txt");
char[] buffer = new char[1024];
int len;
while((len = fr.read(buffer)) != -1){
String rs = new String(buffer, 0 ,len);
System.out.print(rs);
}
作用:
以内存为基准,把内存中的数据以字符形式写到磁盘文件中的流
方法:
作用:
缓冲流自带缓冲区、可以提高原始字节流、字符流读写的性能
数据源->字节流->缓冲流->内存->缓冲流->字节流->目的地
作用:
提高字节输入流读取数据的性能,
构造器:
public BufferedInputStream(inputStream is)可以把低级的字节输入流包装成一个高级的缓冲字节输入流管道,从而提高字节输入流读数据的性能
作用:
提高字符输入流读取数据的性能,按行读取数据
构造器:
public BufferedReader(Reader r)把低级的字符输入流包装成一个高级的字符输入流通道
方法:
Reader fr = new FileReader("Delete/src/data.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
System.out.println(line);
}
作用:
提高字符输出流读取数据的性能,有换行功能
构造器:
public BufferedWriter(Writer w)把低级的字符输出流包装成一个高级的字符输出流通道
方法:
构造器:
public InputStreamReader(InputStream is,String charset)把原始字节输入流按代码指定编码转换成字符输入流
构造器
public OutputStreamWriter(OutputStream os,String charset)把原始字节输出流按代码指定编码转换成字符输出流
作用:实现方便、高效的打印数据到文件中去
构造器:
public PrintStream(OutputStream os/File f/String filepath)
方法;
public void print(Xxx xx)打印任意类型数据出来
实例:
System.out.println("a");
OutputStream os = new FileOutputStream("Delete/src/data1.txt",true);
PrintStream ps = new PrintStream(os);
System.setOut(ps);//改变打印流位置(重定向)
System.out.print("asdasz");
定义:继承于hashtable,属性集中每个键对应一个值(都为字符串)
方法 | 作用 |
---|---|
String getProperty(String key) | 用指定的键在此属性列表中搜索属性。 |
String getProperty(String key, String defaultProperty) | 用指定的键在属性列表中搜索属性。 |
Object setProperty(String key, String value) | 调用 Hashtable 的方法 put,实现新增键值对 |
线程:一个程序内部的一条执行路径
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。
先获取编译后的Class类对象,然后得到Class的全部成分
反射的作用
我们知道反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括包括其modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变fields内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是需要注意的是反射使用不当会造成很高的资源消耗!