狂神Java笔记

数组length方法

在一维数组中,length方法返回数组的长度。比如a[] = {1,2,3,4,5} ,则a.length = 5

在二维数组中,b[] []中,b.length方法返回的是二维数组的行数

​ b[0].length 方法返回的是第0行的长度

静态方法和非静态方法的关系

静态方法:直接通过类名.方法名()调用

非静态方法:1.先实例化这个类 :对象类型 对象名 = 对象值 2.然后对象.方法名

Student student = new student;
student.say();

静态方法不能调用非静态方法,比如下面的例子b();会报错。因为static和类一起加载,没有static类会之后再加载,因此用a( )去调用b( )时,因为b( )还没有加载出来会报错。

public static void a(){
    b();// 会报错
}
public void b(){
    a();
}
值传递和引用传递
// 值传递
public class Demo02 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);// 1
        
        Demo02.change();
        System.out.println(a);// 1
    }
    // 返回值为void 为空
    public static void change(){
        int a = 10;
    }
}
//引用传递
public class Demo03 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);// null

        Demo03.change(person);
        System.out.println(person.name);// 名字
    }
    public static void change(Person person){
        person.name = "名字";
    }
}
class Person{
    String name;
}
构造器

构造器有两个条件:构造器的名字必须和类名相同;也不能有返回值,void也不行

一个类什么都不写,也会存在一个方法:

在这里插入图片描述

使用new关键字本质实在调用构造器(无参构造器或者有参构造器):

在这里插入图片描述

要注意:有参构造器一旦定义,无参构造就必须显示定义。快捷键是alt + insert

this关键字

B站视频(明日科技讲的 this关键字):

写代码的过程中,方法参数(局部变量)和对象属性名会同名,由于方法参数的优先级高于对象属性,会优先使用方法参数。如果要访问对象属性,就必须用“对象. ”的方法,此时需要用this。

并且要注意this只能在对象内部使用,也不能在静态方法中使用。

在这里插入图片描述

继承super

super访问父类的内容,调用父类的name:

在这里插入图片描述

调用父类的构造器super(),必须放在子类构造器的第一行

在执行方法时会先调用父类Person的方法,再调用子类Student。

在这里插入图片描述

this和super的区别:

this 本身调用对象,super代表父类的调用

this 没有继承也可以使用,super 只能在继承下使用

this( )是在本类的构造,super( )是父类的构造

封装(属性私有,get/set)

在设置属性时,有些属性是private私有属性,则需要用get / set方法:

private String name;//名字
private int id;//学号
private char sex;//性别
private int age;//年龄

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public char getSex() {
    return sex;
}

public void setSex(char sex) {
    this.sex = sex;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    if (age > 120 || age < 0) {
        this.age = 3;
    } else {
        this.age = age;
    }
}
public static void main(String[] args) {
    Student s1 = new Student();
    s1.setName("sss");
    s1.setAge(999);
    System.out.println(s1.getName());
    System.out.println(s1.getAge());
}
//输出结果:sss
//         3
方法重载(参数列表不同)
方法重写(只和非静态方法有关系)

重写:需要有继承关系,父类的功能子类不一定需要或者不满足,所以子类要重写父类的方法。

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符范围可以扩大,从private -> protected -> default -> public
  4. 重写会抛出异常,范围可以缩小但不能扩大:Exception -> ClassNotFoundException
  5. 方法重写中,静态方法和非静态方法区别很大。

静态方法:不能重写,方法的调用只和左边定义的数据类型有关。

在这里插入图片描述
非静态方法:在A中,子类(A)重写了父类(B)的方法,因此
在这里插入图片描述

多态

同一个方法可以根据发送对象的不同而采用多种不同的行为方式。

条件:继承关系、方法重写、父类的引用指向子类
Father f1 = new son(); // 父类的引用指向子类

  1. s1属于子类Student,子类可以调用父类的方法,如果子类重写了父类的方法,则执行子类的方法。
  2. s2属于父类Person,只能调用父类的方法,无法直接调用子类独有的方法eat()
  3. s3属于Object类

在这里插入图片描述

instanceof关键字(判断是否有父子关系)

X instanceof Y,判断X是否是Y的子类,能否编译通过

抽象类abstract
  1. 抽象类的所有方法,继承了他的子类都必须要实现他的方法,除非子类本身也是抽象类
  2. 只要存在抽象方法,类必须是抽象的
  3. 不能去new抽象类,只能通过子类去实现它
    在这里插入图片描述
  4. 继承了抽象类就必须重写他的方法:(Override)
    在这里插入图片描述
接口
  1. 接口通过interface定义,抽象类通过abstract定义
    在这里插入图片描述
  2. 子类要实现接口通过implements关键字,implements可以实现多个接口,侧面实现了多继承;extends只能单继承
  3. 实现接口的类,就需要重写(Override)接口的方法
    在这里插入图片描述
内部类
  1. 成员内部类
    在这里插入图片描述2. 局部内部类
    在这里插入图片描述3. 匿名内部类:不用将实例保存到变量中,直接new 类名.方法名
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值