1.String类的特点
- Java程序中所有双引号字符串,都是String这个类的对象
- 字符串一但被创建,就不可修改,字符串内容不可改变
如果想要更改,创建新的对象替换 String s1 = "abc"; s1 = "bcd"
- String 字符串虽然不可改变,但是可以共享
字符串常量池:当我们使用双引号创建对象,会在常量池中检查是否存在该数据
不存在:创建
存在:共享
```Plain Text
String s1 ="abc";
String s2 ="abc";
System.out.println(s1 == s2) # ==判断地址
结果为true
![image.png](https://flowus.cn/preview/b3846c23-b319-4b32-bcd4-c836421dc105)
2.
![image.png](https://flowus.cn/preview/d58a2455-3332-4fe2-be78-ab9de090e303)
new 中的abc是从常量池中拷贝过去的
内存地址不同
创建了两个对象
3.
![image.png](https://flowus.cn/preview/686265a4-a44e-4cbb-be5f-62d0df545787)
使用+号拼接,系统会自动创建一个StringBuilder对象,在该对象中进行拼接,拼接完之后,使用toString方法做类型的转换,转换成String类型。
4.
![image.png](https://flowus.cn/preview/4d6e56f4-97c5-4d32-b298-71a80d18141a)
有常量优化机制,自动拼接。
5.常用方法
2.集合、数组
1.集合:不用管长度
ArrayList<类型> list = new ArrayLIst<>()
2.数组:确定长度
静态初始化: int[] array={ }
动态初始化: int[] array = new int[长度]
3.static
修饰符,可以修饰成员变量、成员方法
如果你的成员变量需要被所有对象共享,就加static
static 成员方法,常用于工具类
特点:
1.被类的所有对象所共享
2.多了一种调用方式,可以通过类名进行调用
3.随着类的加载而加载,优先于对象存在
内存解析
![image.png](https://flowus.cn/preview/00129856-f457-4167-a616-86608f329df4)
内存空间
![image.png](https://flowus.cn/preview/98e2af63-7b76-4bf9-8236-77452d7929c5)
4.继承 extends
1.继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员。
2.什么时候使用继承:当类与类之间存在相同的内容,并且产生了is-a的关系。
3.继承中的成员访问特点:
- 成员变量
就近原则
this:调用被雷成员
super:调用父类成员
![image.png](https://flowus.cn/preview/5010d1d3-bd79-467b-af45-af5cacfd4f6e)
- 成员方法
子父类中,出现了方法声明一摸一样的方法(方法名、参数、返回值)
优先使用子类的方法,对父类的方法,进行了重写
![image.png](https://flowus.cn/preview/7605ac65-b0e7-4292-8bbc-f6d22ab216f2)
方法重写 @Override 对父类的方法进行修改和增强
私有的方法不能重写,权限要大于或等于父类权限
5.继承特点
![image.png](https://flowus.cn/preview/14e642f4-771c-44ac-ac58-7c0b76726a2d)
一个子类只能有一个父类,只支持单继承,不支持多继承
c可以继承b,b可以继承a,支持多层集成
6.权限
![image.png](https://flowus.cn/preview/2ef92c65-2d4a-4502-b8e2-e98875c9a521)
7.内存空间
8.案例
![image.png](https://flowus.cn/preview/7a7960f2-dfa0-4289-b9b3-762ac6e93b37)
5. final
final: 修饰符,可用于修饰方法,类,变量
- 修饰方法:表明该方法时最终方法,不能被重写
- 修饰类:表明该类是最终类,不能被继承
- 修饰变量:表明该变量是最终变量,不能被赋值
6.abstract 抽象类 (对事物做抽象,描述事物)
抽象类:特殊的父类
内部允许编写抽象方法
抽象方法:
当我们将共性的方法,抽取到父类之后,发现在父类中无法给出具体的描述,而且这个方法,子类必须有,就可以设计为抽象方法。
子类必须实现父类的所有抽象方法。
注意:
- 抽象类不能实例化(不能创建对象)
- 抽象类存在构造方法
- 抽象类中可以存在普通方法
- 抽象类的子类
- 要么重写所有抽象方法
- 要么是抽象类
7.接口 interface (对行为抽象,制定规则)
接口:体现的思想是对规则的声明
Java中的接口更多体现的是堆行为的抽象
类实现接口 implement
重写所有抽象方法
接口中的成员特点:
- 成员变量
只能是常量,默认修饰符 public static final
- 成员方法
只能是抽象方法,默认修饰符public abstract
类和接口之间关系:
- 类和类
继承关系,只能单继承,可以多层继承
- 类和接口
实现关系,可以单实现,也可以多实现,还可以在继承一个类同时实现多个接口
- 接口和接口
继承关系,可以单继承,也可以多继承
![image.png](https://flowus.cn/preview/f550b744-2dbc-406a-a612-a86c758312e1)
8. 方法重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。 [1] Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。
9.多进程
- 程序:为完成特定任务,用某种语言编写的一组指令的集合,一段静态的代码。
- 进程:程序的一次执行过程,或是正在内存中运行的应用程序,如:运行中的qq。
- 每个进程都有一个独立的内存空间
- 程序是静态的,进程是动态的
- 操作系统调度和分配资源的最小单位
- 线程:进程可进一步细分为线程,是程序内部一条执行路径,一个进程至少有一个线程
- cpu调度和执行的最小单位
- 并行:两个或多个事件在同一时刻发生。在同一时刻内,有多条指令在多个CPU上同时执行(多个人同时做不同的事情)
- 并发:两个或多个事件在同一时间段内发生。在一时间段内,有多条指令在单个cpu上快速轮换交替
1.线程调度策略
- 分时调度:所有线程轮流使用CPU
- 抢占式调度:优先级高的线程大概率使用CPU
10.static修饰内部类
static不能修饰普通类,但可以修饰内部类。原因如下:
static修饰的东西被我们成为类成员,它会随着类的加载而加载,比如:静态代码块,静态成员,静态方法(这里只是加载,并没有调用)等等。若把一个Class文件中的外部类设为static,那目的何在呢?难道让这个类随着应用的启动而加载吗?如果我在这次使用过程中根本没有使用过这个类,那么是不是就会浪费内存。这样来说设计不合理,总而言之,设计不合理的地方,Java是不会让它存在的。
为什么内部类可以使用static修饰呢,因为内部类算是类的成员了,如果我们没有使用静态来修饰,那么我们在创建内部类的时候就需要先有一个外部类的对象,如果我们一直在使用内部类,那么内存中就会一直存在外部类的引用,而我们有时候只需要使用内部类,不需要外部类,那么还是会浪费内存,甚至会造成内存溢出。使用static修饰内部类之后,内部类在创建对象时就不需要有外部类对象的引用了。
标签:Java,image,flowus,https,整理,preview,方法,png From: https://blog.51cto.com/u_16199733/6886044