3-1、类的定义

语雀原文链接

1、面向过程编程与面向对象编程

  • 面向过程POP-Procedure Oriented Programming:考虑的是整个事件完成需要经过几个步骤,重点关系的是过程。
  • 面向对象OOP-Object Oriented Programming:考虑的是整个事件完成有哪些对象(事物)参与进来

2、面向对象的类和对象

2-1、类和对象

  • 类:一组具有相同特征(属性/成员变量)和行为(成员方法/方法)的事物的集合。
  • 对象:万事万物皆对象,具体的个体。
  • 类和对象的关系:抽象与具体的关系;类是一个抽象的概念,对象是一个具体的个体

2-2、类的声明

  • 类的组成:属性 + 方法(扩展:还可以有成员内部类、代码块)
    • 属性:刻画这一类事物的特征
    • 方法:刻画这一类事物的行为
  • 类的定义语法
public class Person {
    public String name;
    public int age;

    public void eat(String dx) {
        System.out.println("我在吃" + dx);
    }
}

2-3、类的实例化

  • 类的实例化
    • 类名 对象名 = new 类名();
  • 访问类的属性:对象名.属性名;
  • 访问类的方法:对象名.方法名(形参列表);
public class Test {
    public static void main(String[] args) {
        // 类的实例化 对象
        Person person = new Person();

        // 访问对象的属性
        String name = person.name;
        int age = person.age;
        System.out.println(name);// null
        System.out.println(age);// 0

        // 给对象的属性赋值
        person.name = "jack";
        person.age = 12;
        System.out.println(person.name); // jack
        System.out.println(person.age); // 12

        // 调用对象的方法
        person.eat("苹果");// 我在吃苹果
    }
}

3、构造方法

  • 构造方法:实例化对象new时调用的方法
  • 特征:方法名与类名相同;无返回值类型的声明,构造器虽然不会返回任何东西,但是new表达式确实返回了对新建对象的引用
  • 构造方法主要有两个作用:“初始化”与“创建”,创建类对象和初始化对象属性
public class Person {
    public String name;
    public int age;

    public Person(){
        System.out.println("默认无参构造方法");
    }

    public Person(int age){
        System.out.println("有参构造方法: "+age);
        this.age = age;
    }

    public Person(String a, int age){
        System.out.println("有参构造方法: "+age+","+a);
        this.name = a;
        this.age = age;
    }

    public void eat(String dx) {
        System.out.println("我在吃" + dx);
    }
}


public class Main {

    public static void main(String[] aaa) {
        Person p2 = new Person(12);
        System.out.println(p2.age);

        Person p3 = new Person("tom",12);
        System.out.println(p3.name+", "+p3.age);
    }
}
  • 类里有一个默认的无参构造方法(隐式构造方法),如果写了带参数的构造方法,实例化对象时又想用无参构造方法,则必须把无参构造方法写出来

4、成员变量和局部变量

  • 成员变量(在类中定义,用来描述对象的属性)
    • 作用域:在整个类内部都是可见的
    • java会给成员变量一个初始值
    • 成员变量和局部变量同名时,局部变量具有更高的优先级
  • 局部变量(在类的方法中定义,在方法中临时保存数据)
    • 作用域:仅限于定义它的方法
    • java不会给局部变量赋予初始值
    • 同一个方法中,不允许有同名局部变量;不同的方法可以有同名的局部变量
public class Person {

    public String name;

    public int age;

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

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

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

    public Person() {

    }

    public void move(){
        String name = "Jack";
        // 此处使用的name是局部变量 Jack
        System.out.println(name+"开始走路");
        // this使用的name是成员变量
        System.out.println(this.name+"开始走路");
    }
}
this关键字
  • this关键字的作用
    • this用在构造方法里,区分成员变量和局部变量重名的情况,表示当前对象
    • this用在构造方法里,在一个构造方法里调用另一个构造方法,this语句一定要处于整个构造方法的第一行
    • this用在普通方法里,在访问成员变量和其它方法时,在前面会默认加上this
public class Person {
    public String name;

    public int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("Person(String name, int age)");
    }

    public Person() {
//        System.out.println("aaa");
        this("tom",12);
        System.out.println("Person()");

    }

    public void eat(){
        System.out.println("eat");
        this.sleep();
        sleep();
        System.out.println(this.name);
        System.out.println(name);
    }

    public void sleep(){
        System.out.println("sleep");
    }
}

5、方法重载

  • 方法重载:在同一个类里,多个普通方法的方法名一致,形参列表不一致(包含形参类型,顺序,个数)
  • 形参名不参与比较,返回类型不参与比较
  • Student(String age){} Student(String sex){} //不属于方法重载
public class Person {

    public String name;

    public int age;

    public void move(){

    }

    public void move(String name, int age){

    }

    public void move(int age, String name){
        
    }
}

猜你喜欢

转载自blog.csdn.net/sinat_35615296/article/details/134933595
3-1