JavaSE知识总结

目录

一.Java中的三大特性(封装,继承,多态)

1.封装

(1)概念

(2)java中如何实现封装

(3)static关键字

2.继承

(1)概念

(2)继承之后子类对父类成员的访问

(3)java中支持的继承方式

(4)继承中有关构造方法的问题

(5)super和this的区别

(6)protected修饰符

(7)final关键字

3.多态

(1)概念

(2)多态实现条件

(3)代码中是如何体现的

(4)方法的重写

(5)方法的重载

(5)多态中的向上向下转型

(6)对象和引用之间的关系

二.抽象类和接口

1.抽象类

2.接口

三. 有关Cloneable接口的深浅拷贝和String类的知识

1.Coloneable深浅拷贝问题

2.Object中的所有方法

3.String类

4.StringBuilder与StringBuffer的区别

5.java中的异常


一.Java中的三大特性(封装,继承,多态)

1.封装

(1)概念

隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。(套壳屏蔽细节)

(2)java中如何实现封装

通过类, 访问权限限定符和包实现。

类是通过将数据和封装数据的方法结合在一起。

限定符是控制方法和数据是否能直接在类外使用。

包是对类接口之间的封装。

访问权限限定符:private,default,protected,public。

(3)static关键字

static修饰变量:变成了所有对象共享的数据,存储在方法区,在类加载的时候就创建好了。

static修饰方法:类方法,不属于某个对象。可以通过对象调用,也可以通过类名.方法名调用。不能在静态方法中访问非静态成员,因为没有隐藏的this参数。

static在类中修饰类,之后该类就变成了静态内部类。

static在代码块中使用,称为静态代码块,一般初始化静态成员变量。

2.继承

(1)概念

在原有类的基础上,进行扩展,增加新的功能(共性的抽取,代码的复用),如猫和狗都是动物。

java中继承的使用:使用extends关键字。

(2)继承之后子类对父类成员的访问

如果重名优先在子类中找,没有找到就会在父类中找;同名时,如果想调用父类的,使用super调用父类的。

(3)java中支持的继承方式

单继承,多层继承,不同类继承同一个类

(4)继承中有关构造方法的问题

子类初始化时,先初始化父类。子类会默认在构造方法首行自动调用父类无参构造方法,如果父类构造方法是有参的,子类必须调用父类带有参数的构造方法,并传递参数。

(5)super和this的区别

在构造方法中不能同时出现,构造方法中super和this都只能出现在第一行

在类中的非静态方法中使用,只能访问类中的非静态成员方法和字段

super是对继承父类的成员的引用,this是对当前对象成员的引用(在非静态方法中,隐藏的一个参数)

(6)protected修饰符

被protected修饰的成员,在不同包下只能被子类访问。

(7)final关键字

可以用来限制继承

修饰变量,表示变量不能进行修改。

修饰类,表示类不能被继承。

修饰方法,表示方法不能被重写。

3.多态

(1)概念

同一件事,发生在不同对象身上会产生不同的结果。如猫吃猫粮,狗吃狗粮。

(2)多态实现条件

必须在继承的体系下进行实现

子类需要对父类的方法进行重写

通过父类的引用调用重写的方法

(3)代码中是如何体现的

代码运行时,当传入不同类对象时,会调用对应类中重写的方法。

(4)方法的重写

重写的对象:是对父类中非final,非private,非static,非构造方法的重写

如何重写:方法名,方法参数,返回值类型(可以不同,须有父子关系),修饰符(可以不同,子类方法修饰符不能比父类低)必须相同,方法体不同。

(5)方法的重载

方法的参数列表必须不同,方法名必须相同。(其他可以不同)

(5)多态中的向上向下转型

向上转型(子类向父类转型),安全

向下转型(父类向子类转型),不安全,解决方案:使用instanceof关键字。

(6)对象和引用之间的关系

通过引用变量来指向对象的地址

其中引用变量是存放在栈中,而对于一个对象来说,通过new 之后,会存储在堆中。

new 出来的对象是唯一的,而多次引用是引用的同一个对象。

二.抽象类和接口

1.抽象类

一个类没有足够的信息来描述一个具体的对象,就是抽象类。

关键字:abstract

抽象类特性的注意事项:

抽象方法不能为private(默认为public),不能为final,static(要被重写);抽象类不能被实例化对象,抽象类被继承时子类必须重写父类的抽象方法,否则子类也是抽象类。

抽象类可以有构造方法,可以有非抽象方法。

使用抽象类相当于是多了一重编译器的校验。

2.接口

接口就是一种行为规范,Java中的接口相当于是多个类的公共规范,是一种引用类型

关键字:interface

其他类使用通过implements 接口名来进行使用,之后也需要重写里面的抽象方法。

接口中的抽象方法只能为public abstract修饰(默认也会加上),重写接口方法时,不能使用default进行修饰,接口中的默认方法(public abstract)不能进行实现,接口中的变量默认为public static final 进行修饰。

接口中不能有静态代码块和构造方法;jdk8中接口可以有default修饰的方法,且该方法可以有方法体。

接口之间可以进行多继承;普通的类可以实现多个接口,但只能继承一个抽象类。

三. 有关Cloneable接口的深浅拷贝和String类的知识

1.Coloneable深浅拷贝问题

基本类型的不存在深浅拷贝,只有对象存在引用类型成员变量的时候有深浅拷贝。

拷贝前提:Object类中的clone()方法,实现Cloneable接口

2.Object中的所有方法

clone() 【对象拷贝】       equals()【对象比较】        hashCode()【map数据结构中使用】      finalize()【垃圾回收相关】        notify()  ,notifyAll()【线程中的通知】     

  toString()【对象以字符串形式返回】        三个wait() 方法【线程阻塞等待】

3.String类

String类被final修饰,就是不可变,线程安全,String是引用类型,底层是final修饰的字符数组来存储.

String str = "aaa" 只开辟一块内存

String str = new String(“aaa”) 会开辟2块内存,“aaa”保存在字符串常量池中,之后用常量池中的对象给新开辟的对象进行赋值。

String str=new String(new char['a','a','a']);先在对象创建一个String对象,之后将参数中的字符数组拷贝到新开辟的数组空间中。

字符串常量池

jdk8是存在堆中,是全局共享的,在JVM中是StringTable类(是一个固定大小的HashTable)

字符串常量是如何存储到字符串常量池中

类加载时,将字节码文件的常量池加载到JVM中成为运行时常量池,同时也会将里面的字符串常量保存在字符串常量池中。字符串常量池中字符串一部分来自运行时常量池,一部分来自于动态添加。

将字符串对象添加到字符串常量池中的方法:intern()

4.StringBuilder与StringBuffer的区别

StringBuffer线程安全,每个方法都是通过synchronized来进行加锁;StringBuilder线程不安全。

都是被final修饰不能被继承。和String相比来说,是在原对象上进行修改,是可变的。

5.java中的异常

 异常关键字:try catch finally, throw【抛出异常】,throws【声明异常】

处理异常方式:使用try catch 捕获并处理;通过throw 抛出异常,在抛出前还需要对该异常进行声明。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值