Java基础总结
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础总结相关的知识,希望对你有一定的参考价值。
文章目录
1、 Java基础
1.1、数据类型
8种数据类型:
数据类型/位(bit)
byte/8、char/16、short/16、int/32、float/32、double/64、long/64、boolean/8
1.2、String类
String不是java基本数据类型,并且它被声明位final不可被继承(Integer等包装类也不能被继承)
String的底层是通过char数组实现的
String不可变性天生线程安全,可以在多个线程中安全使用
String不可变、StringBuffer和StringBuilder可变
String不可变,线程安全、StringBuiler是线程不安全的、StringBuffer是线程安全的,内部使⽤ synchronized 进⾏同步
1.3、关键字
1.3.1、final
修饰数据时:数据不能被改变
修饰类时:表明此类不能被继承
修饰方法时:表明次方法不能被重写
1.3.2、static
静态变量:又称类变量,可以直接通过类名来访问。静态变量在内存中只存在一份
静态方法:在类加载的时候就存在了,它不依赖任何实例。所以静态方法必须得有实现,不能是抽象方法。只能访问所属类的静态字段和静态方法,方法中不能存在this和super关键字
静态语句块:静态语句块在类的初始化时运行一次
静态内部类:静态内部类不需要先创建外部类,才能创建静态内部类,而非静态内部类需要先创建外部类才能进行创建非静态内部类
静态导包:在使用静态变量和方法时,不用在指明ClassName,但是代码的可读性较低
初始化顺序:静态变量和静态语句块优先于实例变量和普通语句块,静态语句块和静态变量的顺序取决于它们的前后顺序,最后才是构造函数的初始化。如果存在继承关系,顺序为:⽗类(静态变量、静态语句块)⼦类(静态变量、静态语句块) ⽗类(实例变量、普通语句块) ⽗类(构造函数) ⼦类(实例变量、普通语句块) ⼦类(构造函数)
1.4、Object通用方法
1.4.1、equals()
等价关系:两个对象要满足等价关系,需要满足自反性、对称性、传递性、一致性、与null比较为false五个条件
等价和相等:
对于基本类型,== 判断两个值是否相等,基本类型中没有equals方法
对于引用类型,== 判断两个变量是否引用同一个对象,而equals方法判断引用的对象是否等价
1.4.2、hashCode()
hashCode()返回哈希值,equlas()用来判断两个对象是否等价、等价的两个对象的散列值一定相同,但是有相同散列值的两给对象不一定等价。因为计算哈希值具有随机性,所以不等价的两个对象计算出来的散列值也可能相同。
在覆盖equlas()方法时,总会覆盖hashCode()值,确保两个等价对象的哈希值相等
1.4.3、toString()
toString()默认不重写的话,返回的是 包名.类名@… , @后⾯的数值为散列码的⽆符号⼗六进制表示。所以一般需要重写toString()方法,让其返回对象的字符串表示
1.5、继承
1.5.1、继承
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并扩展新的能力,这种继承使得复用以前的代码非常容易,能够大大的缩短开发的周期,降低开发费用
1.5.2、抽象类与接口
抽象类
抽象类和抽象接口都需要用abstract关键字进行声明,如果一个类中存在抽象方法那么这个类必须声明为抽象类
抽象类和普通类最大的区别就是抽象类不能被实例化,只能被继承
接口
接口就是抽象类的延伸,接口中不能有任何方法的实现,是一个完全抽象的类
接口的成员(字段+方法)默认都是public,并且不允许定义为private 或者 protected,并且接口默认字段都是 final 和 static 的
抽象类和接口的区别
一个类可以实现多个接口,一个类只能继承一个抽象类
接口字段只能是final和static类型的,而抽象类没有这种限制
接口的成员只能是public的,而抽象类的成员可以有多种访问权限
1.5.3、super
访问父类构造函数:使用super()函数访问父类的构造函数,从而委托父类完成一些初始化的工作
访问父类的成员:如果子类从写了父类的方法,可以通过使用super()函数来引用父类方法的实现
1.5.4、重写与重载
重写
存在于继承体系中,指子类实现了一个与父类在声明上完全相同的方法
重写需要满足三个要求:
子类方法的权限必须大于父类方法权限
子类方法的返回类型必须是父类方法返回类型或者其的子类型
子类方法抛出的异常类型必须是父类方法抛出类型或其子类型
重载
存在同一个类中,指一个方法与已经存在的一个方法名相同,但是参数类型、个数、顺序至少有一个不同
注意:返回值不同,其他相同不是重载
1.6、反射
反射可以提供运行时的类信息,并且这个类可以在运行时加载进来,甚至在编译时期这个类.class文件不存在也可以加载进来
Class和java.lang.reflect一起对反射提供了支持,java.lang.reflect类库主要包含了以下三个类
Field:可以使用get()和set()获取和修改Field对象关联的字段
Method:可以使用invok()方法来调用与Method相关联的方法
Constructor:可以使用Constructor的newInstance()创建新对象
1.7、异常
Throwable可以用来表示任意可以作为异常抛出的类,分为两种,Error 和 Exception ,Error表示JVM无法处理的错误,而Exception分为两种:
受检异常:需要用try…catch…语句捕获并进行处理,并且可以从异常中恢复
非受检异常:是程序运行时出错,例如除0错误就会抛出 Arithmetic Exception异常,此时程序崩溃无法恢复
异常的处理方式通常有两种:捕获或者向上抛出
1.8、泛型
泛型是JDK1.5的新特性,通常用来和集合对象一起使用
常用名称:
E -> Element(在集合中使用,因为集合中存放的是元素)
T -> Type(Java类)
K -> Key(键)
V -> Value(值)
N -> Number(数值类型)
1.9、注解
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明和配置的功能。注解不会也不能影响到代码的实际逻辑,仅仅起到辅助性的作用。
Java注解可分为三类:JDK自带注解、元注解、自定义注解
JDK注解
@Override:用来标明重写方法
@Deprecated标记就表明这个方法已经过时了,但我就要用,别提示我过期
@SuppressWarnings(“deprecation”) 忽略警告
@SafeVarargs jdk1.7出现,堆污染,不常用
@FunctionallInterface jdk1.8出现,配合函数式编程拉姆达表达式,不常用
元注解
@Target:注解用到哪里,类上、方法上、属性上等等
@Retention:注解的生命周期,源文件中、字节码文件中、运行中
@Inherited:允许子注解继承
@Documented:生成javadoc时会包含注解,不常用
@Repeatable:为重复类型注解,可以在同一地方多次使用,不常用
1.10、特性
JRE和JDK:
JRE:Java Runtime Environment,Java运行环境的简称,为Java运行提供了所需的环境。它是一个JVM程序,主要包括了JVM的标准实现和Java的一些基本类库
JDK:Java Development Kit,Java开发工具包,提供了Java的开发及运行环境。JDK是Java开发的核心,集成了一些JRE和一些其它的工具,比如 Java 源码的编译器 Javac等
以上是关于Java基础总结的主要内容,如果未能解决你的问题,请参考以下文章