javaSE基础部分
2022-10-16 11:37:49 7 举报
AI智能生成
javaSE基础部分
作者其他创作
大纲/内容
面向对象特征
封装,继承,多态
修饰符
访问修饰符
private
被private修饰的属性和方法,不能被其他类访问,子类不能继承也不能访问,只能在所在的内部访问
缺省
缺省变量或者方法前没有修饰符时,可以被所在的类访问,可以被同一包内的其他类访问或者继承,但是不能被其他包访问
protected
被protected修饰的方法和属性,在同一包内可以被访问和继承,不同包内,子类可继承,非子类不能被访问
public
方法和属性使用public修饰时,可以被任意包内的类访问
非访问修饰符
static
可以修饰方法和变量/声明的方法和变量存在jvm的方法区中
静态变量(类变量)
static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量,局部变量不能生命为静态变量
静态方法
静态方法内不能访问非静态方法、不能访问非静态成员方法、不能访问非静态成员变量;但是在非静态成员方法中可以访问静态成员方法和变量
调用方式
可以直接通过 类名.静态方法调用
final
用来修饰类、方法、变量
修饰的类不能被继承;方法不能被重写;变量不能被修改
abstract
用来创建抽象类和抽象方法
修饰类
会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。
修饰方法
会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。
注意
有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。
object类
clone()
创建并返回此对象的一个副本
equals(object obj)
比较某个对象是否此对象相等
1 equals相同,hashcode一定相同
2 equals不相同,hashcode可能相同
3 hashcode不相同,equals一定不同
2 equals不相同,hashcode可能相同
3 hashcode不相同,equals一定不同
finalize()
当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法
getClass()
返回一个对象的运行时类
hashCode()
返回对象的哈希码值
notify()
唤醒在此对象监视器上等待的单个线程
notifyAll()
唤醒在此对象监视器上等待的所有线程
toString()
返回该对象的字符串表示
wait()
导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法
wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法 或者超过指定的时间量
wait(long timeout,int nanos) 导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法 或者其他某个线程终端当前线程 或者超过指定的时间
反射
创建方式
1 forName(全限定路径)
2 类名.class
3 对象.getClass()
机制可在运行时访问java对象的属性,方法,构造方法等
应用场景
开发通用框架
动态代理APO
自定义注解,可扩张性功能
缺点
破坏封装性
反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题
性能开销
由于反射设计动态解析的类型,因此无法执行某些jvm优化,反射操作的性能比非反射操作的性能要差,应该在性能敏感的应用且频繁调用的代码中避免
动态加载类
面试题: 如何在java程序运行时不停机动态加载一个函数进来
new 和 newinstaince的区别
1 创建前提不同: newInstance 创建类是这个类已经加载过且已经连接,new创建类是则不需要这个类加载过
2 创建对象的方式不同: newInstance使用类的加载机制, new则是直接创建一个类
3 创建对象类型不同: newInstance 弱类型(GC回收对象的限制条件很低,容易被回收),低效率只能调用无参构造函数
new 强类型 (GC不会自动回收,只有所有的指向对象的引用被移除才会被回收,若对象生命周期已经结束,但是引用没有被移除,经常会导致内存溢出)
new 强类型 (GC不会自动回收,只有所有的指向对象的引用被移除才会被回收,若对象生命周期已经结束,但是引用没有被移除,经常会导致内存溢出)
接口和抽象类
抽象类
1抽象类含无实现的方法,不能创建对象
2抽象类不必须含有抽象方法
3抽象类不能设private 生来就是为了继承的
4子类必须实现父类抽象方法,或者自己也是抽象类
2抽象类不必须含有抽象方法
3抽象类不能设private 生来就是为了继承的
4子类必须实现父类抽象方法,或者自己也是抽象类
区别
重写: 抽象类中的抽象方法必须实现,非抽象方法不用,接口必须实现所有方法
成员变量:抽象类可以是各种类型,接口只能是pulic static final 类型
方法: 抽象类有方法的实现细节,接口只有public abstract 方法
静态方法/代码块: 抽象类有,接口没有
继承/实现: 只能继承一个抽象类, 但是可以实现多个接口
抽象类的目的
是代码复用,当不同的类具有某些相同的行为A, 且其中的一部分实现相同时记为B, 可以让这些类都派生于一个抽象类,在这个抽象类中实现了B 避免让所有的子类的实现一次B ,这就达到了代码复用的目的,而A-B的部分留给各个子类自己实现,正是因为A-B的部分在这里没有实现,所有抽象类不允许实例化(因为调用A-B的函数部分时无法执行)
接口的目的
是对类的行为进行约束,可以强制要求不同的类须具有相同的行为,它只约束了行为的有无,但不对如何实现行为进行限制
深拷贝&浅拷贝
浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递的拷贝
深拷贝: 对基本数据类型进行值传递,对引用数据类型 创建一个新的对象, 在将值拷贝
区别: 对引用数据类型是否需要创建一个新的对象
基本数据类型
byte short int long double float boolean char
方法中定义基本数据类型局部变量的具体内容是存储在栈中
但是基本类型成员变量也是随类一起存储在堆中
但是基本类型成员变量也是随类一起存储在堆中
引用数据类型
类,对象,接口,数组
引用数据类型变量的具体内容都是存放在堆中的,地址存在栈中
File类
public boolean createNewFile()
创建文件:当且仅当不存在具有此抽象路径名制定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件
创建文件:当且仅当不存在具有此抽象路径名制定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件
public boolean mkdir()
创建目录:创建此抽象路径名指定的目录
创建目录:创建此抽象路径名指定的目录
..............
overload&override
重写(override)
重写就是子类继承父类的相同方法,入参和返回结果相同,但是业务逻辑不同时,就要覆盖父类的方法
重写发生在运行时,子类继承父类允许访问的方法的实现过程继续重写
重载(overload)
重载就是同一个方法,根据入参的不同做出不同的处理
发生在同一个类中(或者父类和子类之间),方法名相同,参数个数不同,顺序不同,方法返回值和访问修饰符可以不同
构造器
不能被继承,不能被重写,可以被重载
1子类继承父类的时候,必须调用父类的构造函数
2父类声明了构造函数时,子类实例化自动调用父类构造函数,在父类没有默认的构造函数时,子类需要使用super调用父类的构造函数
3子类是不可以继承父类的构造函数的,可以调用父类的构造函数
2父类声明了构造函数时,子类实例化自动调用父类构造函数,在父类没有默认的构造函数时,子类需要使用super调用父类的构造函数
3子类是不可以继承父类的构造函数的,可以调用父类的构造函数
注解
元注解/自定义注解
元注解可以对自定义注解进行注解
@Target
描述注解的使用范围:
@Retention
描述注解保留的时间范围:即注解在它所修饰的类中可以保留到何时
public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息
}
public enum RetentionPolicy {
SOURCE, // 源文件保留
CLASS, // 编译期保留,默认值
RUNTIME // 运行期保留,可通过反射去获取注解信息
}
@Documented
在使用javadoc工具编译是,是否要保留注解新信息
@Inherited
使它被修饰的类是否具有继承性,即子类也同时被此注解修饰
@Repeatable
被元注解修饰的注解,可同时作用在一个对象多次,但是每次的含义都不一样
收藏
收藏
0 条评论
下一页