代码编织梦想

一、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");

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mikumiku5/article/details/129539845

Java学习笔记-爱代码爱编程

文章目录 Day1: java学习笔记JDK、JRE与JVM、关键字、八大基本数据类型、引用类型、字符拓展、转义字符、布尔值拓展1.1 JDK、JRE与JVM1.2 Java介绍Day2 类型转换、变量、常量、变量的命名规范2.1 类型转换2.2 变量2.3变量的命名规范Day3: 类型转换、变量、常量、变量的命名规范3.1 类型转换3.2 变量3

java学习笔记(四)_fan2312的博客-爱代码爱编程

字符 char类型占两个字节没有符号位,表示范围是0~65535 ‘0’-48‘A’-65‘a’-97空格-32换行符-10 java字符采用unicode字符集转义字符 \"\’\t\n 自