一、java基础
1.JVM
java语言是跨平台的,运行java程序只需要安装对应操作系统的java虚拟机(JVM,Java Vitural Machine)即可
2.JRE
JRE(Java Runtime Environment)java运行环境,包含JVM和运行所需的核心类库
3.JDK
JDK(Java Development Kit)java开发工具包,包含JRE和开发工具,开发工具包括编译工具(javac.exe)和运行工具(java.exe)
4.注释
注释分为三种:
// 单行注释
/* 多行注释 */
/** 文档注释 */
5.数据类型
数据类型:
6.变量,运算符,结构
省略
7.数组
数组有两种定义方式,推荐第一种
int[] arr = {}; //推荐
int arr[] = {};
数组的初始化分为静态初始化和动态初始化
动态初始化:
int[] arr = new int[3]; //只指定数组长度,系统初始化数值
默认值按照类型分别为:整数:0 浮点数:0.0 布尔:false 字符:空字符 引用型:null
静态初始化
int[] arr = new int[] {1,2,3};
int[] arr = {1,2,3}; //简化版
8.方法
方法省略,但是需要注意的一点是:方法的重载必须要参数的不同,即参数类型不同或者数量不同
9.权限修饰符
10.class类
this被哪个对象调用,this就指向哪个对象
11.String
String字符串中有许多常用的方法:
常用构造方法:
常用方法:
String str = "java study";
int length = str.length(); //获得长度
byte[] bytes = str.getBytes(); //获得字节数组
char[] cArr = str.toCharArray(); //获得字符数组
char c = str.charAt(index); //获得指定位置的字符
boolean f1 = str.equals("java study"); //判断字符串是否相等,比较的是内容
boolean f2 = str.contains("java"); //判断是否包含某个字符串
String str1 = str.trim(); //去掉字符串首尾的空格
String str2 = str.toUpperCase(); //大写
String str3 = str.toLowerCase(); //小写
String str4 = str.substring(begin,end); //获得从begin到end之前的字符串
String str5 = str.substring(begin); //获得从begin到结束的字符串
String str6 = str.replace("a","b"); //a为old,b为new,替换所有值
String[] strArr = str.split(" "); //分割为字符串数组,此处以空格为分割
12.ArrayList集合
是一个存储空间可变的存储模型
//构造
ArrayList<Integer> list = new ArrayList(); //<>内为泛型
//常用方法
list.add(1); //往后添加一个数据
list.add(1,10) //在index为1的位置插入数据原本位于index:1及以后的数据依次后退
13.继承extend
略过
14.抽象类abstract
15.接口interface
16.常用API
(1) Math
(2) System
(3) Object
可以重写两个方法,分别为:
toString() //默认返回内存地址
equals() //默认判断是不是同一个对象
(4) Arrays
sort方法默认从小到大
(5) Integer
int -> String
int a = 10;
String s1 = a + ""; //方法1
String s2 = String.valueOf(a); //方法2
String -> int
String s = "java";
int a = Integer.parseInt(s);
(6) Date
(7) SimpleDateFormat
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);
(8) Throwable
(9) java8新增日期
LocalDateTime
DateTimeFormatter
17.集合类
集合类体系结构
18.Collection集合类
Collection集合常用方法
List集合特有方法
迭代器遍历的过程中如果修改迭代对象的size,会报错
三种迭代方式
List常用子类特点
LinkedList集合特有功能
Set集合类特点
HashSet集合特点
LinkedHashSet集合特点
TreeSet集合特点
compareTo中返回1表示在上一个元素后面,-1在上一个元素前面,0则不插入
实现Comparable接口
构造时指定构造器
19.泛型
泛型定义格式
好处
泛型类
泛型方法
泛型接口
类型通配符
可变参数
20.Map集合类
常用方法
遍历Map的2种方法:
1 是首先获得map的keySet键集合然后再用get方法获得值
2
21.Collections类
常用方法
22.File文件类
构造方法
创建功能
删除功能
判断和获取功能
23.IO流
io流结构图
24.字节流
字节流写数据的方式
字节流写数据实现换行和追加
字节流读数据
一个字节一个字节读,fis为FileInputStream
一次读一个字节数组
简单复制 一次一个字节
一次一个字节数组复制
25.字节缓冲流
增加缓冲区会提高数据读写效率,用法与字节流一致
某次复制视频的速度
26.字符流
汉字占用字节
构造方法,都是以字节流为基础的
字符流写数据的方式
字符流写数据底层还是通过字节写的,所以需要flush一下,即写完数据后调用方法flush(),close()方法调用前也会自动flush
字符流读数据的方式
复制文件样例
复制文件升级版(使用FileReader和FileWriter)
27.字符缓冲流
构造方法
复制文件
特有功能
读取实例
28.特殊操作流
对象序列化流,对象需要实现Serialization接口
对象反序列化流
序列化后更改类文件可能会导致序列id发生变化,从而导致无法反序列化。
Properties
二、java进阶
29.进程和线程
多线程的实现方式1
该方法需要通过调用start()方法来启动线程
可以利用super()来访问父类的有参构造方法从而设置进程名称
public MyThread(String name) {
super(name);
}
java中是抢占式调度模型,若优先级相同则具有随机性
可以通过setPriority()方法设置优先级,从1到10
MyThread.setPrioriry(5);
Thread.currentThread.setName("xxx"); //获得当前进程
多线程的实现方式2
线程控制
线程声明周期
可以使用同步代码块来解决线程同步的问题
同步方法
线程安全的类
Lock锁
Object类中的等待和唤醒方法
30.网络编程
网络编程三要素:ip、端口、协议
InetAddress的使用
UDP通信
发送步骤
接收步骤
TCP通信
发送数据的步骤
接收数据的步骤
31.lambda表达式
使用前提
32.方法引用
33.类加载
类加载器
34.反射
获取类的Class对象有三种方式
获取构造函数示例
Class<?> c = Class.forName("test.Student"); //全路径加载
Constructor<?> constructor1 = c.getConstructor();
Object o1 = constructor1.newInstance();
Constructor<?> constructor2 = c.getConstructor(String.class, String.class, int.class);
Object o2 = constructor2.newInstance("wlx","male",21);
//constructor.setAccessible(true) 可以强行访问,也被称为暴力反射
System.out.println(o1);
System.out.println(o2);
获取成员变量示例
Class<?> c = Class.forName("test.Student");
Constructor<?> constructor = c.getConstructor();
Object obj = constructor.newInstance();
System.out.println(obj);
Field field1 = c.getField("name");
Field field2 = c.getField("sex");
Field field3 = c.getField("age");
field1.set(obj, "wlx");
field2.set(obj, "male");
field3.set(obj, 21);
System.out.println(obj);
Class<?> c = Class.forName("test.Student");
Constructor<?> constructor = c.getConstructor();
Object obj = constructor.newInstance();
Method method = c.getMethod("test", String.class);
method.invoke(obj, "hello");
越过泛型检查示例
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
Class<? extends ArrayList> c = list.getClass();
Method method = c.getMethod("add", Object.class);
method.invoke(list, "xxx");
System.out.println(list);
运行配置文件示例
Properties p = new Properties();
FileReader fr = new FileReader("class.txt");
p.load(fr);
String className = p.getProperty("className");
String methodName = p.getProperty("methodName");
Class<?> c = Class.forName(className);
Object o = c.getConstructor().newInstance();
Method method = c.getMethod(methodName, String.class);
method.invoke(o, "hello");
35.注解
jdk常见内置注解,分别为重写、标记过时、取消警告、函数式接口
常用元注解
自定义注解
注解使用
通过注解和反射运行方法示例
// Annotation类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
public String className();
public String methodName();
}
// 类Test中main方法
Class<Test> c = Test.class;
MyAnnotation annotation = c.getAnnotation(MyAnnotation.class);
String className = annotation.className();
String methodName = annotation.methodName();
Class<?> cc = Class.forName(className);
Object o = cc.getConstructor().newInstance();
Method method = cc.getMethod(methodName, String.class);
method.invoke(o, "hello world");
996579)]
[外链图片转存中…(img-dq2PzSgY-1678797996579)]
注解使用
[外链图片转存中…(img-uqpLjA1c-1678797996580)]
通过注解和反射运行方法示例
// Annotation类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
public String className();
public String methodName();
}
// 类Test中main方法
Class<Test> c = Test.class;
MyAnnotation annotation = c.getAnnotation(MyAnnotation.class);
String className = annotation.className();
String methodName = annotation.methodName();
Class<?> cc = Class.forName(className);
Object o = cc.getConstructor().newInstance();
Method method = cc.getMethod(methodName, String.class);
method.invoke(o, "hello world");