Java面向对象编程

1、什么是面向对象编程?
面向就是拿或找的意思
对象就是东西的意思
面向对象编程就是拿或找东西来编程

2、在Java中必须先创建类,才能获得对象
类:是对象共同特征的描述(设计图)
对象:是真实存在的实例

3、如何定义类?
public class 类名{
    ①成员变量(代表属性,一般是名词)
    ②成员方法(代表行为,一般是动词)
    ③构造块
    ④代码块
    ⑤内部块
}
例:
public class Car{
    //属性(成员变量)
    String name;
    double price;
    //行为(方法)
    public void start(){
    }
    public void run(){
    }
}

4、如何得到类的对象?
类名 对象名 = new 类名();
Car c = new Car();

5、使用对象
对象名.成员变量;
对象名.成员方法(...);

 创建类

//创建类
public class Car {
    //属性(成员变量)
    String name;
    double price;

    //行为(方法)
    public void start(){
        System.out.println(name+"开始启动!");
    }

    public void run(){
        System.out.println(name+ "跑起来!");
    }
}

 使用自己设计的类

//使用自己设计的类
public class Test {
    public static void main(String[] args) {
        //类名 对象名 = new 类名();
        Car c = new Car();

        //使用对象
        //对象名.成员变量;
        //对象名.成员方法;
        c.name = "奔驰";
        c.price = 55.3;

        System.out.println(c.name+"的价格是:"+c.price);
        c.start();
        c.run();

        System.out.println("--------------------");
        Car c1 = new Car();
        c1.name = "比亚迪";
        c1.price = 29.8;

        System.out.println(c1.name+"的价格是:"+c1.price);
        c1.start();
        c1.run();
    }
}
6、定义类有哪些建议,有什么需要注意的?
    1、类名首字母建议大写、英文、有意义、满足驼峰模式、不能用关键字,满足标志符规定;
    2、一个代码文件中可以定义多个类,但是只能有一个类是publi修饰的,
    public修饰的类名必须是Java代码的文件名称;

7、成员变量的格式是什么样的,有什么特点?
    1、成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;
    2、一般无需指定初始化值,存在默认值

对象内存图

1、对象放在哪个位置?
    堆内存中

2、Car c = new Car(); c变量名中存储的是什么?
    存储的是对象在堆内存中的地址

3、成员变量(name、price)的数据放在哪里,存在哪个位置?
    放在对象中,存于堆内存中

 两个变量指向同一对象

//创建类
public class Student {
    //属性(成员变量)
    String name;
    char sex;
    String hobby;

    //行为(方法)
    public void student() {
        System.out.println("名字:" + name + ",性别:" + sex + ",爱好:" + hobby + "的学生开始学习了!");
    }
}
//了解两个变量指向同一对象内存
public class Test {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.name = "阿珍";
        s1.sex = '女';
        s1.hobby = "唱歌、跳舞";
        s1.student();

        System.out.println("-----------------");
        //将s1的变量数据值给s2
        Student s2 = s1;
        s2.hobby = "刷题";

        System.out.println(s1.hobby);//刷题
        System.out.println(s2.name);//阿珍
        System.out.println(s2.sex);//女
        s2.student();
        System.out.println("------------两个变量的地址-------------");
        //s1、s2两个变量的地址指向同一地址
        System.out.println(s1);
        System.out.println(s2);
    }
}
什么是垃圾回收?
    1、注意:当堆内存中的类对象或数组对象,没有被任何变量引用(指向)时,
    就会被判定为内存中的“垃圾”。
    2、java存在自动垃圾回收器,会定期进行清理
构造器
1、学构造器的目的?
    真正知道对象具体是通过调用什么代码完成的
    能够掌握为对象属性赋值的其他写法
2、构造器的作用?
    用于初始化一个类的对象,并返回对象的地址
3、构造器定义的格式
    修饰符 类名(形参列表){
    ...
    }
4、构造器的分类
    1、无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值
    2、有参数构造器:在初始化对象的时候,同时可以为对象进行赋值
    public class Car{
        ...
        //无参构造器
        publicc Car(){
        ...
        }
        //有参构造器
        publicc Car(String name,String price){
        ...
        }
    }
5、注意事项
    1、任何类定义出来,默认就自带了无参数构造器,写不写都有
    2、一旦定义了有参数构造器,默认的无参数构造器就没有了,
    此时需要自己写一个无参数构造器
//构造类
public class Car {
    String name;
    double price;

    //无参数构造器
    public Car() {
        System.out.println("无参数构造器被调用~~~");
    }
    //有参数构造器
    public Car(String n, double p) {
        System.out.println("有参数构造器被调用~~~");
        name = n;
        price = p;
    }
}
//引用构造器

public class Test {
    public static void main(String[] args) {
        Car c1 = new Car();
        System.out.println(c1.name);//null
        System.out.println(c1.price);//0

        Car c2 = new Car("宝马", 50.9);
        System.out.println(c2.name);
        System.out.println(c2.price);
    }
}


this关键字的作用
出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象成员的变量、成员方法
public class Car {
    String name;
    double price;

    //this关键词当前对象的地址,在成员变量中的使用
    public Car(String name, double price) {
        name = name;//null
        price = price;//0
        this.name = name;
        this.price = price;
    }

    //在成员方法中的使用
    public void goWith(String name) {
        //宝马正在和宝马比赛!
        System.out.println(name + "正在和" + name + "比赛!");
        //奔驰正在和宝马比赛!
        System.out.println(this.name + "正在和" + name + "比赛!");
    }
}

public class Test {
    public static void main(String[] args) {
        Car c = new Car("奔驰", 50.9);
        System.out.println(c.name);
        System.out.println(c.price);
        c.goWith("宝马");
    }
}
封装
    面向对象的三大特征:封装、继承、多态
什么是封装?
    隐藏实现细节,暴露出合适的访问方式(合理隐藏、合理暴露)
封装的实现步骤
    1、一般对成员变量使用priva(私有)关键字修饰进行隐藏,
    private修饰后该成员变量就只能在当前类中访问
    2、提供public修饰的公开的getter、setter方法暴露其取值和赋值
封装的好处
    1、加强了程序代码的安全性
    2、适当的封装可以提升开发效率,同时可以让程序更容易理解与维护

public class Student {
    private int age;

    //赋值方法
    public void setAge(int age) {
        if (age >= 0 && age <= 200) {
            this.age = age;
        } else {
            System.out.println("年龄非法!");
        }
    }

    //取值方法
    public int getAge() {
        return age;
    }
}

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.setAge(20);
        System.out.println(s.getAge());
    }
}
JavaBean
    可以理解成实体类,其对象可以用于在程序中封装数据
需要满足的要求
    成员变量使用private修饰
    提供每一个成员变量对应的setXxx()/getXxx()
    必须提供一个无参构造器

public class User {
    //1、成员变量私有
    private String name;
    private double height;
    private double salary;

    //3、必须有无参数构造器(不定义也行,有默认的,前提是没有有参构造器)
    public User() {
    }

    //4、有参数构造器(不是必须的,可以选择)
    public User(String name, double height, double salary) {
        this.name = name;
        this.height = height;
        this.salary = salary;
    }

    //2、必须提供成套的getter()和setter()方法暴露成员变量

    public String getName() {
        return name;
    }

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

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

public class Test {
    public static void main(String[] args) {
        //1、调用无参数构造器创建对象
        User u = new User();
        u.setName("吴彦祖");
        u.setHeight(180);
        u.setSalary(5000);
        System.out.println(u.getName());//吴彦祖
        System.out.println(u.getHeight());//180
        System.out.println(u.getSalary());//5000

        //2、调用有参数构造器创建对象
        User u1 = new User("关之琳", 168, 6000);
        System.out.println(u1.getName());//关之琳
        System.out.println(u1.getHeight());//168
        System.out.println(u1.getSalary());//6000
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值