java基础_day07

一 构造方法

1 概念:

构造方法,其实实也是一个方法。 用于实例化对象, 在实例化对象的时候调用
​

2 与普通方法的区别:

构造方法的名字,必须和类名一致。
构造方法没有返回值,返回值类型部分不用写。

3 构造方法的意义

一般情况下,使用构造方法,是为了在实例化对象的同时,给一些属性进行初始化赋值。

4 构造方法的定义

public class Person {
    String name; // 描述所有人的姓名
    int age; // 描述所有人的年龄
// 无参的构造方法:会将成员变量默认初始化成null/false/0
public Person() {
    this.name = "";
    this.age = 0;
}
    // 有参的构造方法:会将成员变量进行初始化并赋值,赋值成你传进来的参数
public Person(String name, int age) {
    this.name = name;
    this.age = age;
    }
}
​

5 构造方法的注意事项

如果一个类中没有写构造方法, 系统会自动提供一个public权限的无参构造方法, 以便
实例化对象。
如果一个类中写构造方法了, 此时系统将不再提供任何的默认的构造方法。
多个构造方法之间是重载的关系
​

6 this在构造方法中的使用

1.不能自己调用自己---死循环
2.不能相互调用----死循环
3.this充当构造方法时,必须放在第一行
4.this在作为方法的时候,只能充当构造方法,不能作为其他方法
5.this的使用范围就是当前类的内部
6.只有在非静态方法中,才可以使用this.

二 封装

1 基础

定义:我们可以通过对具体属性的封装实现.把对成员变量的访问进行私有化,让他只能在类内部可见,通过公共的方法间接实现访问.
优点:提高了代码的安全性,复用性和可读性

2 示例代码

脏数据:我们把程序中出现的不符合逻辑的数据称为脏数据

脏数据分析 原因:让用户直接将数据传给了成员变量 解决:

1.不让他直接传值----将成员变量私有化,写 一个公共的方法

2.对数据进行过滤,将过滤后的数据交给成员变量

public class Demo7 {
    public static void main(String[] args) {
//开枪射击
    Gun gun = new Gun();
//脏数据
    //gun.bulletNumber = -5;
//将属性私有化,通过方法间接赋值
    gun.addBulletNumber(-5);
    gun.shoot();
}
    }
class Gun{
//成员私有化后,使用范围就是当前的类
private int bulletNumber;
//通过公共方法实现赋值
    public void addBulletNumber(int number){
//完成过滤
    if (number < 0){
    bulletNumber = 0;
}else {
    bulletNumber = number;
    }
}
    public void shoot(){
    if (bulletNumber > 0){
    --bulletNumber;
}
    System.out.println(bulletNumber);
    }
}

3 getter,setter方法

​ 因为往往我们会有大量的属性需要进行赋值取值操作,所以就形成了一个规范

3.1 赋值的规范:setter方法

构成:修饰词 返回值 方法名 (参数列表){
方法体中的代码
return 返回值
}
修饰词:一定是public
返回值:不需要,这里写void
方法名:set+属性的名字,名字的首字母大写
参数列表:一般只有一个,写法:与属性同名
代码:this.属性的名字 = 参数
return:不需要

3.2 取值的规范:getter

构成:修饰词 返回值 方法名 (参数列表){
方法体中的代码
return 返回值
}
修饰词:public
返回值:类型与属性一致
方法名:get+属性的名字,首字母大写
参数列表:不需要
代码:没有
return 属性的名字/this.属性的名字
​

三 继承

3.1 继承基础

有两个类A和B,如果A与B之间产生了父子关系,B可以直接使用A里面的内容,他们的关系就是继承
​
优点:
提高了代码的复用性,健壮性,安全性,让类与类之间有了继承关系,让多态可以发生
注意点:一个父类可以有多个子类
一个子类只能有一个直接父类。
​
​

3.2 final关键字

是一个常用关键字,意思是最后的,最终的.在程序中只要被final修饰的内容是不能再被改变的.
比如:
int a = 5;这是定义了一个int型的变量a赋值成5.如果我们给它加上修饰词final
final int a = 5; 这里a就相当于变成了常量,值一直是5,不能再被改变.

3.3 Object类(基类/超类)

Object类:是java继承体系中所有类的父类,Object类没有父类.
作为所有类的父类,它里面有11个方法,相当于所有子类都默认有这些方法,所以都很重要.
​

3.3 继承的特点

产生继承关系后, 子类可以使用父类中的属性和方法, 也可以定义子类独有的属性和方
法
Java是单继承, 一个类有且只能有一个直接的父类,可以有若干个间接的父类,一个父类可以有0个或者多个子类,子类之间互不影响
使用继承,可以简化代码,提高代码的复用性,提高代码的拓展性,增加代码的健壮性,最重要的使类与类之间产生了继承的关系,是多态的前提

3.4 继承的语法

继承, 需要使用关键字 extends。 在定义类的时候, 使用 子类 extends 父类 的方式描述继承。
Object类:是java继承体系中所有类的父类,Object类没有父类.
//Phone类没有显示的父类,默认父类是Object类
class Phone {}
//Iphone类继承自Phone类
class Iphone extends Phone {
}

3.5 不可以被继承

构造方法
构造方法是为了创建当前类的对象的, 不可以继承给子类。
私有成员
私有成员只能在当前的类中使用, 不可以继承给子类。
注意:父类的私有成员,在子类中可见不可用
跨包子类
默认权限的属性、方法, 不可以继承给跨包的子类。

3.6 访问权限修饰符

访问权限修饰符, 就是修饰类、属性的访问级别。
对于类来说:只能有default和public两个修饰符

3.7方法重写(重点)

3.7.1 重写原理:

当子类希望实现父类方法功能之外的一些功能时,如何处理?
解决:
子类可以继承到父类中的属性和方法, 但是有些方法, 子类的实现与父类的方法可能实现的
不同。 当父类提供的方法已经不能满足子类的需求时, 子类中可以定义与父类相同的方法。
当出现同名方法后,方法如何调用?
当出现同名方法后,方法如何调用?
这时子类方法完成对父类方法的覆盖, 又叫重写(Override)。
​

3.7.2@Override

一个注解, 进行重写前的校验。 校验这个方法是否是一个重写的方法。 如果不是重写的方 法, 会直接报错。

3.7.3 重写的注意事项

方法名字必须和父类方法名字相同
参数列表必须和父类一致
子类方法的访问权限需要大于等于父类方法的访问权限,父类不能是private
子类方法的返回值类型需要小于等于父类方法的返回值类型--引用类型

3.7.4 super关键字

有时候,子类重写父类方法的时候,并不是要对父类的实现全盘推翻,而是对父类方法进行拓展。
父类方法中的实现仍然需要, 但是还需要在父类方法的基础上进行拓展的实现, 此时就需要使用super关键字调用父类的方法。
​
this和super的对比
this:是一种引用类型,代表当前对象,保存的是当前对象的地址 super:代表的是当前对象的父类,可以调用父类的成员.但是他不是引用数据类型.
​
为什么要将super放在构造方法的第一行?
在子类的构造方法中有可能用到父类的属性,而属性在使用之前必须先进行初始化,否则无法使用.super的作用是初始化父类的属性,如果在super之前调用了其他的代码,有可能造成在未对
父类属性初始化时使用了属性的错误情况发生,所以系统默认super前面不能放任何代码,this()用于构造方法调用时也要放在第一行是一个道理.

上一篇:大数据开发岗面试复习30天冲刺 - 日积月累,每日五题【Day07】——Hbase1


下一篇:H5前期学习 day07