java基础知识点
java的基础数值类型
byte -128~127 short 16位 int 32位 long 64位 float double char boolean
java字符串相关
java new对象相关
1.String A = "ABC";内存会去查找永久代(常量池) ,如果没有的话,在永久代中中开辟一块儿内存空间,把地址付给栈指针,如果已经有了"ABC"的内存,直接把地址赋给栈指针;
2.而String str = new String("a");是根据"a"这个String对象再次构造一个String对象;在堆中从新new一块儿内存,把指针赋给栈,将新构造出来的String对象的引用赋给str。 因此 只要是new String(),则,栈中的地址都是指向最新的new出来的堆中的地址
3.String s = new String("abc")实际上是"abc"本身就是文字池中的一个对象,在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool 中,一个在堆中。
StringBuilder和StringBuffer的区别
1.当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
2.1)如果要操作少量的数据用 String;(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。
3.stringbuffer直接通过synchronized 关键字来实现同步操作
4.stringbuilder ArrayIndexOutOfBoundsException异常 且计数不是原子操作。
5.扩容的逻辑就是new一个新的char数组,新的char数组的容量是原来char数组的两倍再加2,再通过System.arryCopy()函数将原数组的内容复制到新数组,最后将指针指向新的char数组。
Scanner
1.Scanner in = new Scanner(System.in);
2.获取int?nextLine() 方法会以回车符作为截止,将回车符连同之前的所有字符都读取出来,然后将会车符丢掉,把读取的之前的所有字符组合成一个完整的字符串,交换给我们。nextInt() 方法也是以回车符作为截止,但是只读取回车符之前的所有字符,而回车符留在了消息队列中。next() 方法和nextInt方法一样,它们不读取回车符;但next()方法看到空格也截止,而nextLine只看到回车符才截止。
3.获取多个int?
4.获取字符串?
在输入12回车,则自动识别12赋值给a,而回车则为\n\r,识别为字符串,则自动赋值给s,而回车在控制台上又不显示,那么给我们的感觉则是,只输入了一个就直接停止输入了。
5. 获取一行?
String input = sc.nextLine();//获取用户输入
String[] strArr=input.split(" ");//将用户输入以字符串的形式保存到数组
int id= Integer.parseInt(strArr[0]);//用包装类里面的方法将相应的类型转化保存到变量中
Swich
switch 击穿问题
switch中代码相同的case是可以归并的,类似于在if-else的Boolean中使用"||"。
数组
引用大佬的
https://www.cnblogs.com/Jade-Liu18831/p/9595748.html
数组的内存空间分配
深入了解:https://www.jianshu.com/p/aa905c079332
对象
对象和对象变量
https://blog.csdn.net/bupa900318/article/details/80651736 封装的优点
良好的封装能够减少耦合。 类内部的结构可以自由修改。 可以对成员变量进行更精确的控制。 隐藏信息,实现细节。
基于类的访问权限
Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protected,还有一种不 带任何修饰符。
private : Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
default :即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。默认的保护模式
protect : 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。也就是说,希望包中的一个类被包之外的类继承重用时,就可以使用这个级别。一般应该慎用。(包中类被包外类继承重用)
public : Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。。(跨包访问) 方法参数 按值传递 类初始化
静态的非静态的 类的设计技巧 数据设计为私有的 数据一定初始化–避免空指针的问题 不要使用过多的基本类型 不是所有的域都需要域访问器和域更改器 职责过多的类进行分解 类名和方法名变量名体现他的职责 意义 抽象类和接口的区别
相同点:位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;都可以包含抽象方法,其子类都必须覆写这些抽象方法;
区别:抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥Java的单继承)
抽象类是这个事物中应该具备的内容, 继承体系是一种 is…a关系
接口是这个事物中的额外内容,继承体系是一种 like…a关系
继承
方法签名是什么
https://blog.csdn.net/liu_sisi/article/details/88368846 方法重写 方法重载 多态 动态绑定 为啥重写了equals方法要重写hashcode方法
采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用; 128陷阱
https://blog.csdn.net/weixin_44407699/article/details/99712247
反射
https://www.jianshu.com/p/9be58ee20dee