JavaSE-基础篇学习笔记分享(二)

171 阅读7分钟

笔记整理自B站尚硅谷JavaSE视频,其中可能有记录内容不正确,望诸位指出

作者:Vison


15、Objet类

Object是所有java类的根父类
如果在类的声明中未使用extends关键字指出其父类,则其默认父类为java.long.Object类


16.包装类

针对八种基本数据类型定义相应的引用类型 --- 包装类(封装类)
有了类的特点,就可以调用类中的方法,Java才是真的面向对象

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharactor

基本数据类型 --> 包装类
String类 --> 包装类

装箱:

  1. 通过构造器:Integer t = new Integer(11);
  2. 通过字符串参数 Float f = new Float("32.1F");
  3. 自动装箱

包装类 --> 基本数据类型

拆箱:

  1. 调用包装类方法xxxValue();
  2. 自动拆箱

包装类 --> String类

  1. 包装类对象的toString()方法
  2. 调用包装类的toString(形参)方法

基本数据类型 --> String类

  1. String类的valueOf(3.4f)方法
  2. 23.4 + ""

String类 --> 基本数据类型

  1. 调用相应的包装类的parseXxx(String)静态方法
  2. 通过包装类构造器: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来修饰,表示最终的。

  1. final标记的类不能被继承

  2. final标记的方法不能被子类重写

  3. final标记的变量(成员变量或局部变量)即称之为常量,名称大写,且只能被赋值一次

static

使用范围:
在java类中,可用static修饰属性,方法,代码块,内部类

被修饰后的成员具备以下特点:

  1. 随着类的加载而加载

  2. 优先于对象存在

  3. 修饰的成员,被所有对象所共享

  4. 访问权限允许时,可不创建对象,直接被类调用

instanceof的使用

  1. x instanceof A:检查x是否为类A的对象,返回值为boolean类型

  2. 要求x所属的类与类A必须时子类和父类关系,否则编译错误

  3. 如果x属于类A的子类B,也为true

this

在Java中,this关键字比较难理解,
它的作用和其词义很接近。它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象。

this 可以调用类的属性、方法和构造器
什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用this。 具体的:我们可以用this来区分属性和局部变量。
比如:this.name =name

  1. 在任意方法或构造器内,如果使用当前类的成员变量或成员方法可以在其前面添加this增强程序的阅读性。不过,通常我们都习惯省略this.

  2. 当形参与成员变量同名时,如果在方法内或构造器内需要使用成员变量,必须添加this来表明该变量是类的成员变量

  3. 使用this访问属性和方法时,如果在本类中未找到,会从父类中查找

super

在Java类中使用super来调用父类中的指定操作:

  1. super可用于访问父类中定义的属性

  2. super可用于调用父类中定义的成员方法

  3. super可用于在子类构造器中调用父类的构造器注意:

  4. 尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员>super的追溯不仅限于直接父类

  5. super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

this和super的区别

区别点thissuper
访问属性访问本类中的属性,如果本类没有此属性则从父类中继续查找直接访问父类属性
调用方法访问本类中的方法,如果本类没有此属性则从父类中继续查找直接访问父类方法
访问属性访问本类中的构造器,必须放在构造器首行调用父类构造器,必须放在子类构造器的首行

toString()方法

  1. toString方法在Object类中定义,其返回值时String类型,返回类名和它的引用地址

  2. 在进行String与其他类型数据的连接操作时,自动调用toString()方法

  3. 可以根据需要在用户自定义类型中重写toString方法

  4. 基本数据类型转化为String类型时,调用了对应包装类的toString方法

==和equals区别

  1. ==既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型就是比较内存地址

  2. equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也是==

  3. 我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中用的比较多,久而久之,形成了equals是比较值的错误观点。

  4. 具体要看自定义类里有没有重写Object的equals方法来判断。

  5. 通常情况下,重写equals方法,会比较类中的相应属性是否都相等。

19、封装

java权限修饰符public,protected,(缺省),private置于类的成员定义前,用在限定对象对该类成员的访问权限

修饰符类内部同一个包不同包的子类同一个工程
privateYes
缺省YesYes
protectedYesYesYes
publicYesYesYesYes

image.png

20、继承

作用:

  1. 继承的出现减少了代码冗余,提高了代码的复用性
  2. 继承的出现,更有利于共嗯那个的扩展
  3. 继承的出现让类与类之间产生了关系,提供了多态的前提

21、多态

多态性,是面向对象中最重要的概念,在Java中的体现: 对象的多态性:父类的引用指向子类的对象

可以直接应用在抽象类和接口上Java引用变量有两个类型:编译时类型和运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。
简称:编译时,看左边;运行时,看右边。 若编译时类型和运行时类型不一致,就出现了对象的多态性(Polymorphism) 多态情况下,
“看左边”:看的是父类的引用(父类中不具备子类特有的方法) “看右边”:看的是子类的对象(实际运行的是子类重写父类的方法)

对象的多态:
在Java中.子类的对象可以替代父类的对象使用

一个变量只能有一种确定的数据类型
一个引用类型变量可能指向(引用)多种不同类型的对象

子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:向上转型(upcasting)。

image.png

22、java的值传递机制

方法的形参的传递机制

形参:方法定义时,声明的小括号内的参数

实参:方法调用时,实际传递给形参的数据

值传递机制:

如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值

如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值