【Java】面向对象 封装

面向对象

        面向:找 拿   对象:东西

面向对象编程:

        找拿东西过来编程

面向对象的好处:

        符合人类思维习惯,编程简单,更好理解

设计对象并使用 

        类就是设计图

类:对对象共同特征的描述

对象:真实存在具体实例

结论:在Java中必须先设计类才能创建对象并使用

如何设计类:

public class 类名{

        1.成员变量(代表属性,一般是名词)

        2.成员方法(代表行为,一般是动词)

        3.构造器(看下面)

        4.代码块(后面补充)

        5.内部类(后面补充)

}

例:

public class Car{

// 属性()

        String name;

        double price;

//行为(方法)

        public void start(){

        }

        public void run(){

        }

}

获得类的对象:

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

        Car c = new Car();

使用对象:

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

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

public class Car {
    //成员变量
        String name;
        double price;

    //方法
        public void start(){
            System.out.println(name+"启动了");
        }

        public void run(){
            System.out.println("价格是:"+price+"的"+name+"跑的飞快!");
        }

}
public class OopDemo {
    public static void main(String[] args) {
        Car c1 = new Car();
        c1.name = "奔驰";
        c1.price = 40.0;
        System.out.println(c1.name);
        System.out.println(c1.price);
        c.start();
        c.run();

        System.out.println("----------------");

        Car c2 = new Car();
        c2.name = "奥迪";
        c2.price = 60.0;
        System.out.println(c2.name);
        System.out.println(c2.price);
    }
}

 定义类的几个补充注意事项

        1.类名首字母建议大写,且有意义,满足“驼峰模式

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

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

成员变量的默认规则

与数组的默认规则相同

 总结对象

1.对象到底放在哪个位置?

        堆内存中

2.Car c = new Car(); c变量名中存储的是什么?

        存储的是对象在堆内存中的地址

3.成员变量(name price)的数据放在哪里,存在于哪个位置?

        对象中,存在于堆内存中

垃圾回收

注意:

        当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。

        Java存在自动垃圾回收器,会定期进行清除 

构造器

构造器的作用:

        定义在类中的,可以用于初始化一个类的对象,并返回对象的地址

        Car c = new Car();//无参构造器

构造器格式:

修饰符 类名(){

}

例:

public class Car{

        //无参构造器

        public Car(){

        }

        //有参构造器

        public Car(String name,double price){

        }

1.构造器的作用?

        初始化类的对象,并返回对象的地址

2.构造器有几种,各自的作用是什么?

        无参数构造器:初始化对象时,成员变量的数据都均采用默认值

        有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值

3.构造器有哪些注意事项?

        任何类定义出来,默认就自带了无参数构造器,写不写都有

        一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了

this关键字

        this关键字:可以出现在构造器,方法中,代表当前对象的地址

作用:可以用于指定访问当前对象的成员变量成员方法

public class Student {
    String name;
    int age;
    char six;

    public Student(){
        System.out.println("无参数构造器");
    }

    public Student(String name,int age,char six){
        System.out.println("有参数构造器");
        this.name = name;
        this.age = age;
        this.six = six;
    }

    public void run(String name){
        System.out.println("现在是"+this.name+"和"+name+"比赛!");
    }
}
public class ThisDemo {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.name);
        System.out.println(s.age);
        System.out.println(s.six);

        Student s1 = new Student("大珍珠",23,'男');
        System.out.println(s1.name);
        System.out.println(s1.age);
        System.out.println(s1.six);

        s1.run("黑珍珠");
    }
}

1.this关键字是什么?

        出现在构造器和成员方法中,代表当前对象的地址

2.this关键字在构造器中,成员方法中可以做什么?

        可以用于指定访问当前对象的成员

封装

        面向对象的三大特征:封装 继承 多态

封装:告诉我们,如何正确的设计对象的属性方法

封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为

可能比较抽象

人画圆:是提供了画圆的方法

人开门:是提供了开门的方法

张三砍死李四:李四提供了死亡方法

1.什么是封装?

        告诉我们,如何正确设计对象属性方法

        原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为

2.理解封装思想有什么好处?

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

        降低我们的学习成本,可以少学,少计,需要时直接找 

更好的封装

        一般会把成员变量使用private隐藏起来,对外就不能直接访问了

        提供public修饰的getter和setter方法暴露取值暴露赋值

        提高业务功能设计的安全性提高程序逻辑性开发效率

标准JavaBean

        可以称为实体类,其对象可以用于在程序中封装数据

标准JavaBean需要满足书写格式:

        成员变量使用private修饰

        提供成员变量对应的setXxx() / getXxx()方法

        必须提供一个无参数构造器;有参数构造器可写可不写

public class User {
    private String name;
    private int age;
    private char sex;

    public User() {
    }

    public User(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

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

成员变量 局部变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值