Java知识点总结
1.main方法
一个程序有且仅有一个main方法启动,main方法作为Java程序启动的唯一入口。
2.权限修饰符
public(公开类、有且仅有,类名和文件名一致)
修饰类 | 修饰方法 | 修饰域 | |
---|---|---|---|
public | 公有类 | 都可以访问 | 都可以访问 |
private | 私有类 | 不会在其他类中访问,只能在本类中访问 | 不会在其他类中访问,只能在本类中访问 |
protect | 子类可以继承和访问,同包下的类也可以访问 | 子类可以继承和访问,同包下的类也可以访问 | |
default | 只有同包的可以访问 | 只有同包的可以访问 |
3、关键字
static关键字
静态类:静态内部类
修饰静态域:所有类的对象共享这一个域
修饰一个静态方法:只能访问静态属性
final关键字
修饰常量:常量不可变
修饰方法:不能被重新可以使用
修饰类:不能被继承
防止指令重新排序
4.数据类型
基本数据类型:整数型:int(8-128~127)、long、short、byte
浮点型:char、boolean、float、double
类型转换:顺着箭头的自动转换,逆向为强转,实线是不会丢失,虚线精度可以丢失的自动类型转换
5、包装器类:
自动拆装箱(编译器行为)
装箱:valueof
拆箱:intvalue、longvalue在对象上进行调用
128陷阱:128陷阱分析
6、String
String对象,不可变类型(改变就是一个新的字符串、并不提供修改数组的方法)
final修饰类不能被继承不能重写,修饰char类型后,地址不可变,内容可变,但是没有具体的方法去修改内容,保证了String的不可变性。(共享大于修改的便利性)
(final修饰的类表示着他不能被继承的就没有子类,没有子类也就没有办法通过重写父类方法的形式去调整这些方法的行为)
提升字符串拼接效率:StringBuffer(安全:加锁)、Stringbuilder
7、数组
每一个数组是一个新建的类型
冒泡、快排、堆排、
8、抽象类和接口的区别
接口更多的是描述行为或者能力,单继承,多实现,
抽象类是描述事务本身的特质
接口能实现的抽象类都能实现
抽象类是一个类,可以有类中有的东西,接口不可以
9、类加载的先后顺序;
运行结果:
10、Object类,equals和==的区别
==如果两边是引用类型,比较的是他们的地址,如果两边是基本数据类型,比较的是他们的值
equals是看是否是同一个对象,检查字符串是否相等,不能作用于基本数据类型的变量,
在Java中我们重写equals方法时也要重写hashcode,两者一起重写
equals用于比较两个对象是否“相等”,而hashCode则用于计算对象的哈希值,hashcode和地址有关。重写是为了判断是否在hashmap或hashset的正确位置。
如果你只重写了equals方法,却没有重写hashCode方法,可能会导致两个equals的对象产生不同的哈希值,从而在使用哈希表相关的数据结构时产生逻辑错误。另一方面,如果两个对象不equals,但是你没有正确重写hashCode方法,可能造成它们产生相同的哈希值,虽然不会产生逻辑错误,但是会大大降低哈希表检索的效率。
11、内部类
局部内部类、普通内部类、静态内部类、匿名内部类(new抽象类或接口并用{}实现方法,下面是案例)
Ctrl+i生成内部run,并在里面输出123,在main里直接new并调用一下
我们可以直接new里写入new 一个Run会直接生成,在Run里写入234,后面start即可运行