面向对象知识点

1.介绍:

  • 面向:拿、找;

  • 对象:能干活的东西;

  • 面向对象编程:拿东西过来做对应的事情;

2.设计对象并使用:

(1)类和对象

  • 类(设计图):是对对象共同特征的描述;

  • 对象:是真实存在的具体东西。

注意:在Java中,必须先设计类,才能获得对象。

public class 类名{
    /*
    1、成员变量(代表属性,一般是名词)
    2、成员方法(代表行为,一般是动词)
    3、构造器
    4、代码快
    5、内部类
    */
}
  • 如何获得类的对象:

    • 类名 对象名=new 类名();

  • 如何使用对象:

    • 访问属性:对象名.成员变量

    • 访问行为:对象名.方法名(…)

  • 例:

public class Phone {
    String brand;
    double price;
    public void call(){
        System.out.println("手机打电话");
    }
    public void playGame(){
        System.out.println("手机玩游戏");
    }
}
  • 定义类的补充注意事项:

    • 用来描述一类事物的类,专业叫做:javabean类

    • 在javabean类中,不写main方法

  • 以前写main方法的类,叫做测试类

  • 我们可以在测试类中创建Javabean类的对象并进行赋值调用。

  • 注意:

    • 类名首字母大写,见名知意,驼峰模式。

    • 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。(实际开发中一个文件定义一个clas类)

    • 成员变量的完整定义格式:修饰符 数据类型 变量名称=初始化值;一般无需指定初始化值,存在默认值。

数据类型 明细 默认值
基本数据类型 byte/short/int/long 0
float/double 0.0
boolean false
引用数据类型 类、接口、数组、String null
  • 例:女朋友类:

    • 需求:编写女朋友类,创建女朋友类中的方法。

public class GirlFriend {
    String name;
    int age;
    String gender;
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
}
public static void main(String[] args) {
    GirlFriend gf = new GirlFriend();
    gf.name="小颖";
    gf.age=18;
    gf.gender="御姐";
​
    System.out.println(gf.name);
    System.out.println(gf.age);
    System.out.println(gf.gender);
    gf.eat();
    gf.sleep();
}

3.封装

<1>.相关概念:

(1)面向对象三大特征:封装、继承、多态;

(2)封装定义:就是如何正确设计对象的属性和方法;

(3)使用:就是对象代表什么,就得封装成对应的数据,并提供数据对应的行为;

(4)好处:

  • 让编程变得简单,有什么事,找对象、调方法就行;

  • 降低我们的学习成本;

<2>.private关键字

(1)作用:

  • 是一个权限修饰符;

  • 可以修饰成员(成员变量和成员方法)

  • 被private修饰的成员只能在本类中才能访问;

  • 为保证数据的安全性;

  • 针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作;

  • 提供“setXxx”方法,用于成员变量赋值,方法用public修饰;

  • 提供“getXxx”方法,用于获取成员变量的值,方法用public修饰;

(2)例:

public class GirlFriend {
    private String name;
    private int age;
    private String gender;
    public void sleep(){
        System.out.println("女朋友在睡觉");
    }
    public void eat(){
        System.out.println("女朋友在吃饭");
    }
//    针对于每一个私有化的成员变量,都要提供get和set方法
//    set方法:给成员变量赋值
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
        //等号左边:表示成员位置的name
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        if(age>=18&&age<=50){
            this.age = age;
        }else {
            System.out.println("非法参数");
        }
    }
​
    public String getGender() {
        return gender;
    }
​
    public void setGender(String gender) {
        this.gender = gender;
    }
}
public static void main(String[] args) {
    GirlFriend gf = new GirlFriend();
    gf.setName("小颖");
    gf.setAge(18);
    gf.setGender("御姐");
​
    System.out.println(gf.getName());
    System.out.println(gf.getAge());
    System.out.println(gf.getGender());
    gf.eat();
    gf.sleep();
}

<3>this关键字:

(1)成员变量和局部变量:

  • 遵循就近原则

区别 成员变量 局部变量
类中位置不同 类里,方法外 方法内、方法申明上
初始化值不同 有默认初始化值 没有,需要赋值
内存位置不同 堆内存 栈内存
生命周期不同 随着对象的创建而存在,随着对象的消失而消失 随着对象的创建而存在,随着对象的消失而消失
作用域 整个类中有效 当前方法中有效

例:该图输出的是局部变量的age;若想输出成员变量的age,则在输出语句中输入:this.age

面向对象知识点_第1张图片

4.构造方法:

(1)概述:构造方法:可称为构造器或者构造函数。

(2)作用:在创建对象的时候由虚拟机自动调用,给成员变量进行初始化;

(3)格式:

/*public class Student{
    修饰符 类名(参数){
        方法体;
    }
}*/

(4)分类:

  • 无参构造方法:初始化对象是,成员变量的数据均采用默认值;

  • 有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值;

(5)注意:

  • 方法名与类名相同,大小写也要一致

  • 没有返回值类型,连void都没有

  • 没有具体的返回值(不能由return带回结果数据)

  • 执行时机:

    • 创建对象的时候由虚拟机调用,不能手动调用构造方法;

    • 每创建一次对象,就会调用一次构造方法;

普通方法 成员方法 构造方法
public static void student(){} public void student(){} public student(){}
public class GirlFriend {
    private String name;
    private int age;
    private String gender;
​
    public GirlFriend() {
    }
​
    public GirlFriend(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        if(age>=18&&age<=50){
            this.age = age;
        }else {
            System.out.println("非法参数");
        }
    }
​
    public String getGender() {
        return gender;
    }
​
    public void setGender(String gender) {
        this.gender = gender;
    }
}
public static void main(String[] args) {
    GirlFriend gf = new GirlFriend("小颖",18,"御姐");
    System.out.println(gf.getName());
    System.out.println(gf.getAge());
    System.out.println(gf.getGender());
    gf.eat();
    gf.sleep();
}
(6)注意事项:
  • 构造方法定义:

    • 我们没有写任何构造方法,那么虚拟机回给我们加上一个空参构造方法;

    • 如果定义了构造方法,系统将不再提供默认的构造方法;

  • 构造方法的重载:

    • 带参构造方法,和无参数构造方法,两者方法名相同,但参数不同

  • 推介使用方式:

    • 无论是否使用,都手动书写无参构造方法,和带全部参数的构造方法;

5.标准的Javabean类:

(1)要求:

  • 类名需要见名知意

  • 成员变量使用private关键字修饰

  • 提供至少两个构造方法

    • 无参

    • 带全参

  • 成员方法

    • 提供每一个成员变量对应的setXxx/getXxx

public class User {
    private String name;
    private String password;
    private String email;
    private String gender;
    private int age;
​
    public User() {
    }
​
    public User(String name, String password, String email, String gender, int age) {
        this.name = name;
        this.password = password;
        this.email = email;
        this.gender = gender;
        this.age = age;
    }
​
    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }
​
    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }
​
    /**
     * 获取
     * @return password
     */
    public String getPassword() {
        return password;
    }
​
    /**
     * 设置
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }
​
    /**
     * 获取
     * @return email
     */
    public String getEmail() {
        return email;
    }
​
    /**
     * 设置
     * @param email
     */
    public void setEmail(String email) {
        this.email = email;
    }
​
    /**
     * 获取
     * @return gender
     */
    public String getGender() {
        return gender;
    }
​
    /**
     * 设置
     * @param gender
     */
    public void setGender(String gender) {
        this.gender = gender;
    }
​
    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }
​
    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }
}

6.对象内存图:

(1)一个对象的内存图:

Student s=new Student();

  • 步骤:

    • 加载class文件

    • 申明局部变量

    • 在堆内存中开辟一个空间

    • 默认初始化

    • 显示初始化

    • 构造方法初始化

    • 将堆内存中地址赋值给左边局部变量

面向对象知识点_第2张图片

(2)两个对象的内存图:

面向对象知识点_第3张图片

(3)两个引用指向同一个对象:

面向对象知识点_第4张图片

7.this内存原理:

this本质:代表方法调用者的地址;

面向对象知识点_第5张图片

面向对象知识点_第6张图片

你可能感兴趣的:(Java,java,开发语言)