JavaSE零碎知识点
1.java为解释性语言,程序讲代码编译成字节码,然后由JVM解释进行
2.java是纯面向对象语言
3.不支持多重继承,可继承多个接口.
4.java不支持运算符重载,没有预处理,不支持默认函数参数.
Java程序初始化顺序
1.静态对象>非静态对象
2.父类对象>子类对象
3.其他(包含构造函数)按照编写顺序进行初始化
Java变量作用域
1.成员变量:类对象生命周期结束
2.静态变量/局部变量:类被JVM加载,即存在可调用
3.局部变量:或括号类即可使用
Java构造函数
1.可有多个构造函数,多个参数
2.super显示调用父类构造函数(当父类没有提供无参构造函数时)
3.当父类和自雷都没有定义构造函数时,会生成一个默认的无参构造函数
Java接口
1.抽象方法定义的集合
2.成员:public
3.常用值:public static final
已存在接口:serializable和cloneable
Clone接口的复制(重写接口Cloneable)
浅复制:引用对象的值复制了过来,单是仍会只想同一个引用值.
深复制:引用对象的值复制,且不再指向原来对象的值
反射机制:
1.得到对象的类,成员变量和方法.
2.运行时创建对象,调用对象方法.
<1>Class.forName(“path”) <2>类名.class <3>实例.getClass
Package的作用
<1>提供多层命名空间 <2>对类功能分类
面向对象的特性:
<1>封装 <2>继承 <3>多态 <4>抽象
多态实现的机制
<1>重载(overload) <编译时多态> 同一个类有多个同名方法
<2>覆盖(override) <运行时多态> 动态绑定不同类的相同方法.
抽象类和接口的异同点
1.相同点:
(1)不能被实例化
(2)子类实现接口或抽象方法后才能被实例化
2.不同点:
(1)接口:只有定义,方法不能被实现
抽象类:可以实现与定义.
(2)接口:implements has-a
抽象类:extends is-a
(3)接口:
成员变量 默认public static final(必须赋初值,不能被修改)
成员方法 public/abstract
抽象类:
成员变量 默认default,也可以定义其他(子类可修改重新定义)
抽象方法使用abstract
内部类:
<1>静态内部类
Class out{
Static class inner{}
}
1.可以不依赖外部实例化
2.只能访问外部类的静态成员/方法
<2>成员内部类(非静态内部类)
Class out{
Class inner{}
}
1.可以自由引用 静态/非静态 方法和成员
2.内部不能有静态成员
<3>局部内部类
Class out{
Public void func(){
Class inner{}
}
}
代码块中的类
1.相当于局部变量,不能被public static修饰.
2.只能访问final类型局部变量
<4>匿名内部类
局部内部类的一种.
Final关键字
Final修饰的变量:引用不可变,必须初始化
(指向的初始对象不能变,值可以变)
初始化的方式: 1.定义时初始化
2初始化块中初始化(静态final在静态块中) fianl{块}
3.类构造器中初始化(静态final不可以)
Assert(对boolean表达式的检查)
<1>检查控制流
<2>检查输入参数有效性
<3>函数结果有效化
<4>检查程序不变量
Static关键字用法
<1>static成员变量
内存中只有一个复制.(类/对象,静态变量).所有对象共享,相当于全局变量.
<2>static成员方法
方法不可用this和super
<3>static代码块
JVM加载类会加载静态代码块
<4>static内部类
可直接用Outer,Inner实例化.
==/equals和hashcode
<1>”==”比较两个变量是否相等
比较的是内存中所存储的数值 (内存地址)
(适用于比较基本数据类型)
<2>equals比较的也是内存数值引用.
特点:可以重写
例:String类
默认 boolean equals(Object obj){
return this==o;
}
<3>HashCode()方法
返回对象在内存中地址换成的int值.
(未重写,每个对象都不同) 默认返回地址值.
例:HashMap判断
规则:
1.equals判断相等,HashCode必相等
2.equals判断不相等,hashcode不一定相等
字符串创建与存储机制
JVM存在字符串池(方法区),可以被共享使用
- String s1 = new String(“abc”);
String s2 = new String(“abc”); s1不等于s2.
2 String s1=”abc” String s2=”abc” a等于b
3 new String(“abc”) 等于”abc”,new String()
当常量池有”abc”,则创建一个对象
常量池没有时,则创建两个对象
String,String Buffer,String Builder和String Tokenizer
1.String是不可变类
2.String Buffer是可变类,线程安全(多线程)
3.String Builder是可变类,线程不安全 (单线程)
4.String Tokenizer用来分割字符串的工具类
执行效率String<String Builder<String Builder
异常处理:
原理:
程序运行时所发生的非正常情况或错误,当违反了以后,JVM会抛出异常.
Throwable--------1.error 2.exception
<1>检查型异常 (非运行时异常)
IO或者SQL异常
<2>运行时异常 (未强制捕捉异常)
1.NullPointerException 空指针
2.ClassCastException
3.ArrayIndexOutOfBoundsExceptions
4.ArrayStoreException
5.BufferOverFlowException 缓冲区
6.ArithmeticException 算术
Throws暴露问题让调用者处理
Finally
1.finally在return前执行.
2.会覆盖方法体重的变量return. [有return]
3.finally中为引用类型,则可修改值.
Finally部位引用类型,则不能修改值.
原因:执行return前先存储值,在执行finally. [无return]
不执行finally的两种方法:1.try之前有异常 2.exit(0)
函数的返回值是在finally前确定的.
Java序列化
1.序列化 Serializable
将对象以连串字节描述的过程
特点:
1.类能被序列化,则子类也可以
2.static,transient(不用维持的关键字)不能被序列化.
2.使用序列化的情况:
<1>网络发送对象
<2>深复制
3.反序列化(将流转为对象) SerialVersionID
4.外部序列化 Externalizable 继承 Serializable
5.部分序列化:
<1>Externalizable中实现
<2>transient实现