概述
文章目录
- 序
- JavaSe
- 零散点
- 字符串
- 多态
- 时间类+格式化时间
- Date类
- SimpleDateFormat类
- Calendar类
- 正则表达式
- 字符类
- 预定义字符
- 贪婪量词
- Lambda表达式
- 泛型
- 迭代器
- For循环增强
- 可变参数
- Collection集合
- List系列集合
- Set系列集合
- Collections
- Map集合
- Stream流
- 异常
- 运行时异常
- 异常处理
- 日志
- Logback
- 实现
- 日志级别
- File类
- 创建File对象
- 删除文件
- 遍历
- 编解码
- IO流
- 字节流
- 字节输入
- 字节输出
- 字符流
- 字符流输入
- 字符流输出
- 缓冲流
- 字节缓冲流
- 字节缓冲输入流
- 字符缓冲输入流
- 字符缓冲输出流
- 字符转换流
- 字符输入转换流
- 字符输出转换流
- 打印流
- Properties类
- 多线程
- 反射
序
之前一直在看黑马程序员的Java教程,平时记录也就是把视频中的ppt截图存放。但是时间久了发现之前很多内容都没有记牢,熟用。现在改用文字记录总结平时学习到的内容,同时学会熟练使用MarkDown写法。Java官方API文档。
JavaSe
零散点
- Java文件的名称和Public修饰的类名相同,类中包含一个或多个方法,从main方法开始执行
- final修饰的变量不可重新赋值改变,final声明的类为最终类,不能被继承
- 只有当被除数是负数时余数才是负数
- 强制类型转换–>(类型)变量
- sc.next()读取以空格为结束的字符串,sc.nextLine()读取以回车会结束的字符串
- 数值型字符串转换为整数–>int 变量名 = Interger.parseInt(字符串)
- 数组间用=表示新数组指向原数组
- 重载方法->同名不同参
- 不可变集合List.of(“”,“”)返回一个集合
- finally之前的try中如果有return语句,会先执行finally语句再执行return语句
- static{}可用于初始化,main方法之前执行
- 打印一个对象,会默认调用toString方法,如果没重写toString方法,就返回对象地址
- 接口中的方法默认由public abstract修饰,常量默认由public static final修饰
- 接口中被default修饰的方法可以直接补全方法的代码,接口被实现后可直接使用该方法
字符串
- toCharArray()->将字符串拆分返回一个字符数组
- substring(start,end)->从start开始到end截取字符串返回一个新字符串
- replace(“a”,“b”)->将字符串中的a全部替换成b
- split(“,”)->将字符串以","分隔,返回一个字符串数组
多态
格式:
- 父类 实例对象名称 = new 子类构造器
- 父类转子类(instanceof判断) -> 子类 名称 = (子类)实例对象名称
- 方法调用: 编译看左边,运行看右边
- 变量调用: 编译,运行都看左边
时间类+格式化时间
Date类
Date类位于util包内,用于操作时间。
格式:
- Date nowTime = new Date(ms);当ms存在时,将该毫秒值转换为日期对象
方法:
- getTime()获取毫秒值(距1970年01月01日 00时00分00秒)、System类中的currentTimeMillis()也可以获取毫秒值
SimpleDateFormat类
格式:
- SimpleDateFormat 对象名称 = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss EEE a”);
- 调用对象的format(Date类)方法返回一个格式化后的字符串
- 调用对象的parse(格式化字符串)返回一个的Date类
实例:
// 格式化时间
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类
Calendar是一个抽象类,不能直接创建对象。
方法:
- get(int field)返回日期某个字段信息(Year、Month、Day)
- set(int field,int value)修改日历的某个字段信息
- add(int field,int amount)为某个字段增/减指定的值
- getTime()拿到此刻日期对象,返回一个Date对象
- getTimeInMillis()拿到此刻时间毫秒值
正则表达式
方法:
- matches(),判断是否匹配正则表达式,返回Boolean类型
字符类
- [abc]指定字符
- [^abc]除了指定字符外的字符
- [a-zA-Z]从a(A)到z(Z)包括
- [a-d[m-p]]从a到d或从m到p
- [a-z&&[^def]]从a到z除去指定字符
- [a-z&&[^m-p]]从a到z除去指定范围字符
预定义字符
- .任何字符
- d一个数字[0-9]
- D非数字[^0-9]
- s一个空白字符[tnx0Bfr]
- S非空白字符[^s]
- w英文、数字、下划线[a-zA-Z_0-9]
- W一个非单词字符[^w]
贪婪量词
- X? x,一次或无
- x* x,0次或多次
- x+ x,一次或多次
- x[n] x,n次
- x[n,] x,至少n次
- x[n,m] x,至少n不超过m
Lambda表达式
简化函数式接口(接口中有且仅有一个抽象方法,通常加@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();
}
泛型
格式:
- 修饰符 class 类名<泛型变量>{} 泛型方法
- 修饰符 <泛型变量> 返回类型 名称(){} 泛型类
- 修饰符 interface 接口名称<泛型变量>{} 泛型接口
作用:
- 编译阶段指定数据类型
- 泛型接口可以让实现类选择当前功能需要操作的数据类型
拓展:
- <?>其中?作为通配符, <? extends(super) Car>表示?必须是car或其子类(或其父类)
- 泛型和集合都只支持引用数据类型,不支持基本数据类型,集合中存储的元素认为是对象
迭代器
格式:
Iterator iterator()返回迭代器对象
方法:
- hasNext()询问当前位置是否有元素返回Boolean
For循环增强
格式:
for(元素数据类型 变量名:可迭代对象){
该变量就是元素
}
可变参数
格式:数据类型…参数名称(本质是一个数组)
Collection集合
方法:
- add(E e)将对象e添加到指定集合
- clear()清除所有元素
- remove(E e)将对象e移除当前集合
- contains(Object obj)判断当前集合是否含指定对象
- isEmpty()判断当前集合是否为空
- size()返回集合中元素个数
- toArray()集合中的元素存储到数组
List系列集合
元素有序、可重复、有索引
- ArrayList
有序、可重复、有索引 - LinkedList
有序、可重复、有索引
特有功能:
- addFirst(E e)从列表开头插入元素
- addLast(E e)添加到末尾
- getFirst()得到列表第一个元素
- removeFirst()删除第一个
Set系列集合
哈希值:JDK根据对象的地址,按照规则算出来的int类型的数值。hashCode()方法返回对象哈希值
元素无序、不重复、无索引
- HashSet
无序、不重复、无索引 - LinkedHashSet
有序、不重复、无索引 - TreeSet
按大小默认升序、不重复、无索引。
- 存储元素为对象时,实现Comparable接口重写compareTo方法自定义比较规则。
- TreeSet集合有参构造器可以设置Comparator接口对应比较器对象,定制规则
Collections
作用:
Collections不属于集合,使用来操作集合的工具类
方法:
- addAll(Collection <? super T>)给集合批量添加元素
- shuffle(List<?> list)打乱list集合元素顺序
- sort(List list, Comparator<? super T> c)指定规则排序
Map集合
格式: Map<数据类型,数据类型> maps = new Map<>()
键值对应key=value,无序不重复,无索引
方法:
- put(K key,V value)添加元素
- remove(Object key)根据键删除键值对元素
- clear()移除所有键值对元素
- containKey(Object key)判断集合是否包含指定的键
- isEmpty()判断集合是否为空
- size()集合长度,即键值对个数
- HashMap
无序、不重复、无索引
- LinkedHashMap——有序、不重复、无索引
- HashTable
- TreeMap
排序、不重复、无索引
Stream流
Stream操作集合或数组首先要得到stream流,再使用流的功能
通过Collection接口中stream方法实现
方法:
- filter(Predicate <? super T> predicate)对流中数据进行过滤
- limit(long maxSize)获取前几个元素
- skip(long n)跳过前几个元素
- distinct()去除流中重复元素
- collect(Collector collector)开始收集stream流,指定收集器
- toList()/toSet()/toMap(Function key,Function value)把元素收集到List/Set/Map集合中
实例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());
异常
- Error:系统级别问题,JVM退出
- Exception:java.lang包下,异常类,可处理问题(包括运行时异常(RuntimeEXCEPTION)和编译时异常)
运行时异常
- ArrayIndexOutOfBoundsException数组索引越界异常
- NullPointerException空指针异常
- ArithmeticException数字操作异常
- ClassCastException类型转换异常
- NumberFormatException数字转换异常
异常处理
格式:
try{
//监视可能出现异常的代码
}catch(异常类型 变量){
//异常处理
}Finally{
}
或者方法直接将异常通过throws抛出给调用者
日志
规范接口:Commons Logging(JCL)
实现框架:Log4j、JUL(java.util.loggiing)、Logback
Logback
基于slf4j的日志规范实现的框架
技术模块:
- logback-core:为其他两个模块奠定基础
- logback-classic:log4j的改良版本
- logback-access:模块与Tomcat和Jetty等Servlet容器集成,提供HTTP访问功能
实现
- 在项目新建文件夹lib,导入Logback相关jar包(logback-classic、logback-core、slf4j-api),并添加到项目依赖库
- 在Logback核心配置文件logback.xml拷贝到src目录下
- 在代码中获取日志对象(public static final Logger LOGGER=loggerFactory.getLogger())
日志级别
TRACE < DEBUG < INFO < WARN < ERROR(默认基本为debug)
File类
位于java.io.File下用于文件操作
方法:
- isDirectory()是否为文件夹
- isFile()是否为文件
- exists()是否存在该文件
- getAbsolutePath()返回绝对路径字符串
- getPath()路径转为字符串
- getName()获取文件(夹)名称
- lastModified()获取最后修改的时间毫秒值
创建File对象
public File(String pathname)方法
File f1 = new File(“D:/blog/myblog/data.txt”)
方法:
- createNewFile()创建一个新的空文件夹(实例化对象时可直接创建)
- mkdir()只能创建一级文件夹
- mkdirs()可创建多级文件夹
删除文件
- delete()不走回收站且默认只能删除空文件夹
遍历
- list()获取目录下所有一级文件名到一个字符串数组中返回
- listFiles()获取目录下所有一级文件对象到一个文件对象数组中返回
实例:
//递归找文件
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编码方式
IO流
- flush()刷新流,还可继续写数据
- close()关闭流,释放资源
字节流
字节输入
作用:
以内存为基准,把磁盘文件中的数据以字节形式读取到内存中
方法:
- FileInputStream(File file)创建字节输入流管道与源文件对象接通
- FileInputStream(String pathname)创建字节输入流管道与源文件路径接通
- read()每次读取一个字节返回,没有字节可读返回-1
- read(byte[] buffer)每次读取一个字节数组返回,没有字节可读返回-1
实例:
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));
字节输出
作用:
以内存为基准,把内存中的数据以字节形式写出到磁盘文件中去的流
方法:
- FileOutputStream(File file,Boolean append)创建字节输出流管道与源文件对象接通,可追加s数据
- FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
- write()写一个字节出去
- write(byte[] buffer,int pos,int len)写一个字节数组的一部分出去
字符流
字符流输入
作用:
以内存为基准,把磁盘文件中的数据以字符形式读取到内存中
方法:
- FileReader(File file)创建字符输入流管道与源文件对象接通
- FileReader(String pathname)创建字符输入流通道与源文件路径接通
- read()每次读取一个字符返回,没有字符可读返回-1‘
- read(char[] buffer)每次读取一个字符数组,返回读取字符个数,无字符可读返回-1
实例:
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);
}
字符流输出
作用:
以内存为基准,把内存中的数据以字符形式写到磁盘文件中的流
方法:
- FileWriter(File file,boolean append)创建字符输出流管道与源文件对象接通,可追加数据
- FileWriter(String filepath)创建字符输出流管道与源文件路径接通
缓冲流
作用:
缓冲流自带缓冲区、可以提高原始字节流、字符流读写的性能
数据源->字节流->缓冲流->内存->缓冲流->字节流->目的地
字节缓冲流
字节缓冲输入流
作用:
提高字节输入流读取数据的性能,
构造器:
public BufferedInputStream(inputStream is)可以把低级的字节输入流包装成一个高级的缓冲字节输入流管道,从而提高字节输入流读数据的性能
字符缓冲输入流
作用:
提高字符输入流读取数据的性能,按行读取数据
构造器:
public BufferedReader(Reader r)把低级的字符输入流包装成一个高级的字符输入流通道
方法:
- readLine()读取一行数据返回,无行可读返回null
实例:
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)把低级的字符输出流包装成一个高级的字符输出流通道
方法:
- newLine()换行操作
字符转换流
字符输入转换流
构造器:
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");
Properties类
定义:继承于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。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是需要注意的是反射使用不当会造成很高的资源消耗!
最后
以上就是美好楼房为你收集整理的JavaSe学习笔记的全部内容,希望文章能够帮你解决JavaSe学习笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复