笔记整理自B站尚硅谷JavaSE视频,其中可能有记录内容不正确,望诸位指出
作者:Vison
15、Objet类
Object是所有java类的根父类
如果在类的声明中未使用extends关键字指出其父类,则其默认父类为java.long.Object类
16.包装类
针对八种基本数据类型定义相应的引用类型 --- 包装类(封装类)
有了类的特点,就可以调用类中的方法,Java才是真的面向对象
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Charactor |
基本数据类型 --> 包装类
String类 --> 包装类
装箱:
- 通过构造器:Integer t = new Integer(11);
- 通过字符串参数 Float f = new Float("32.1F");
- 自动装箱
包装类 --> 基本数据类型
拆箱:
- 调用包装类方法xxxValue();
- 自动拆箱
包装类 --> String类
- 包装类对象的toString()方法
- 调用包装类的toString(形参)方法
基本数据类型 --> String类
- String类的valueOf(3.4f)方法
- 23.4 + ""
String类 --> 基本数据类型
- 调用相应的包装类的parseXxx(String)静态方法
- 通过包装类构造器:boolean b = new Boolean("true");
17、虚拟方法调用
正常的方法调用
Person e = new Person();
e.getInfo();
虚拟方法调用(多态情况下)
子类中定义了与父类同名同参数的方法,在多态状态下,将此时父类的方法称为虚拟方法,父类根据赋给它的不同子类对象,动态调用属于子类的该方法,这样的方法调用在编译期间是无法确定的
Person e = new Student();
e.getInfo();
编译时类型和运行时类型 编译时e为Person类型,而方法的调用是在运行时去欸的那个的,所以调用的是Student类的getInfo()方法 -->动态绑定
18、关键字
final
在java中声明类变量和方法时,可以使用关键字final来修饰,表示最终的。
-
final标记的类不能被继承
-
final标记的方法不能被子类重写
-
final标记的变量(成员变量或局部变量)即称之为常量,名称大写,且只能被赋值一次
static
使用范围:
在java类中,可用static修饰属性,方法,代码块,内部类
被修饰后的成员具备以下特点:
-
随着类的加载而加载
-
优先于对象存在
-
修饰的成员,被所有对象所共享
-
访问权限允许时,可不创建对象,直接被类调用
instanceof的使用
-
x instanceof A:检查x是否为类A的对象,返回值为boolean类型
-
要求x所属的类与类A必须时子类和父类关系,否则编译错误
-
如果x属于类A的子类B,也为true
this
在Java中,this关键字比较难理解,
它的作用和其词义很接近。它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象。
this 可以调用类的属性、方法和构造器
什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。 具体的:我们可以用this来区分属性和局部变量。
比如:this.name =name
-
在任意方法或构造器内,如果使用当前类的成员变量或成员方法可以在其前面添加this增强程序的阅读性。不过,通常我们都习惯省略this.
-
当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量
-
使用this访问属性和方法时,如果在本类中未找到,会从父类中查找
super
在Java类中使用super来调用父类中的指定操作:
-
super可用于访问父类中定义的属性
-
super可用于调用父类中定义的成员方法
-
super可用于在子类构造器中调用父类的构造器注意:
-
尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员>super的追溯不仅限于直接父类
-
super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
this和super的区别
| 区别点 | this | super |
|---|---|---|
| 访问属性 | 访问本类中的属性,如果本类没有此属性则从父类中继续查找 | 直接访问父类属性 |
| 调用方法 | 访问本类中的方法,如果本类没有此属性则从父类中继续查找 | 直接访问父类方法 |
| 访问属性 | 访问本类中的构造器,必须放在构造器首行 | 调用父类构造器,必须放在子类构造器的首行 |
toString()方法
-
toString方法在Object类中定义,其返回值时String类型,返回类名和它的引用地址
-
在进行String与其他类型数据的连接操作时,自动调用toString()方法
-
可以根据需要在用户自定义类型中重写toString方法
-
基本数据类型转化为String类型时,调用了对应包装类的toString方法
==和equals区别
-
==既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址
-
equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==
-
我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。
-
具体要看自定义类里有没有重写Object的equals方法来判断。
-
通常情况下,重写equals方法,会比较类中的相应属性是否都相等。
19、封装
java权限修饰符public,protected,(缺省),private置于类的成员定义前,用在限定对象对该类成员的访问权限
| 修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
|---|---|---|---|---|
| private | Yes | |||
| 缺省 | Yes | Yes | ||
| protected | Yes | Yes | Yes | |
| public | Yes | Yes | Yes | Yes |
20、继承
作用:
- 继承的出现减少了代码冗余,提高了代码的复用性
- 继承的出现,更有利于共嗯那个的扩展
- 继承的出现让类与类之间产生了关系,提供了多态的前提
21、多态
多态性,是面向对象中最重要的概念,在Java中的体现: 对象的多态性:父类的引用指向子类的对象
可以直接应用在抽象类和接口上Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
简称:编译时,看左边;运行时,看右边。 若编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism) 多态情况下,
“看左边”:看的是父类的引用(父类中不具备子类特有的方法) “看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)
对象的多态:
在Java中.子类的对象可以替代父类的对象使用
一个变量只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象
子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。
22、java的值传递机制
方法的形参的传递机制
形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据
值传递机制:
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值