Java-6-面向对象 01 - 07


Java面向对象 01 - 07

Java面向对象01 - 什么是面向对象

面向对象的本质:以类的的方式组织代码,以对象的组织(封装)数据

  • 抽象
  • 三大特征:
    • 封装
    • 继承
    • 多态

Java面向对象02 - 回顾方法的定义

Java面向对象03 - 回顾方法的调用

  • 调用一
package Demo01;

public class Student {

    //非静态方法
    public void say(){
        System.out.println("学生说话了");
    }

    public static void eat(){
        System.out.println("学生吃东西了");
    }
}
package Demo01;

public class Demo01 {
    //main方法
    public static void main(String[] args) {

        //1.非静态方法实例化
        //用new来实例化类
        //对象类型 对象名 = 对象值
        Student student = new Student();
        student.say();

        //2.非静态方法实例化
        new Student().say();

        //3.静态方法实例化
        Student.eat();
    }
}
学生说话了
学生说话了
学生吃东西了
  • 调用二
    • 两个static的函数互相调用
    • 没有问题
package Demo01;

public class Demo02 {
    public static void a(){
        b();
    }

    public static void b(){

    }
}
  • 调用三
    • 两个非static的函数互相调用
    • 没有问题
package Demo01;

public class Demo02 {
    public void a(){
        b();
    }

    public void b(){

    }
}
  • 调用四
    • 在一个static函数下,调用一个非static函数
    • 报错
package Demo01;

public class Demo02 {
    public static void a(){
        b();
    }

    public void b(){

    }
}
  • 调用五
    • 在一个非static函数下,调用一个static函数
    • 没有问题
package Demo01;

public class Demo02 {
    public void a(){
        b();
    }

    public static void b(){

    }
}

原理:static方法在类加载时就存在了,但是非static方法在类被实例化的时候才存在,所以static方法不会提前知道非static方法的存在,但是非static方法一定能知道static方法的存在。

  • 修改成功
package Demo01;

public class Demo04 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);
        Demo04.change(person);
        System.out.println(person.name);
    }

    public static void change(Person person){
        person.name = "Liang Junyi";
    }
}

class Person{
    String name; // null
}
null
Liang Junyi
  • 修改失败
package Demo01;

public class Demo05 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);

        Demo05.change(a);

        System.out.println(a);
    }

    public static void change(int a){
        a = 10;
    }
}
1
1

Java面向对象04 - 类与对象的创建

package Demo02;


public class Application {
    public static void main(String[] args) {
        //类,抽象的,实例化
        //类实例化后会返回一个自己的对象
        //student对象是一个Student类的具体实例

        Student xiaoming = new Student();
        Student xiaohong = new Student();

        xiaoming.name = "小明";
        xiaoming.age = 3;
        System.out.println(xiaoming.name);
        System.out.println(xiaoming.age);

        xiaohong.name = "小红";
        xiaohong.age = 5;
        System.out.println(xiaohong.name);
        System.out.println(xiaohong.age);
    }


}
小明
3
小红
5

Java面向对象05 - 构造器详解

  • 使用new关键字创建对象
  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中的构造器的调用
  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
    1. 必须保持和类的名字相同
    2. 必须没有返回类型,也不能写void

构造器要求

  • 与类名相同的public函数

  • 分为有参数与无参数构造

构造器特点

  • 不创建的时候系统会默认创建一个无参数构造器
    • 反之手动创建了构造器后,不会再自动生成无参构造器
  • 使用new关键字,本质是在调用构造器
  • 构造器被用来初始化值
  • 通常有参构造与无参构造都会写,而且写不止一个有参构造,也就是重载
  • alt + insert 快捷键,可用来生成构造器
package Demo03;

public class Person {
    String name;
    int age;


    public Person(){

    }

    public Person(String name){
        this.name = name;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

}
package Demo03;

public class Application {

    public static void main(String[] args) {
        Person person = new Person("zhaoxiaoyi",23);

        System.out.println(person.name);
    }

}

Java面向对象06 - 创建对象内存分析

image-20221109162321337

Java面向对象07 - 简单小结类与对象


Author: Liang Junyi
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Liang Junyi !
  TOC