Java 学习笔记 --面向对象

面向对象学习内容

1 什么是面向对象

1.1 对象

1.2 面向对象

2 类和对象

1.1 类和对象定义

1.2 类和对象练习

1.2.1 面向对象表示狗狗

ooptest1.Dog
java 复制代码
package com.itstudy.ooptest1;
/*
        1.利用面向对象思想表示狗狗(属性:名字,年龄,体重,毛发颜色)
*/
public class Dog {

    String name; //名字
    int age; //年龄
    double weight; //体重
    String color; //毛发颜色

}


// 3.课堂作业:利用面向对象思想表示手机(属性:品牌,颜色,价格)
ooptest1.Test
java 复制代码
package com.itstudy.ooptest1;

public class Test {
    public static void main(String[] args) {

        //第一只狗信息管理
        Dog d1= new Dog();
        d1.name="旺财";
        d1.age=1;
        d1.weight=10;
        d1.color="黄色";
        System.out.println(d1.name);
        System.out.println(d1.age);
        System.out.println(d1.weight);
        System.out.println(d1.color);

        System.out.println("-----------------");
        //第二只狗信息管理
        Dog d2= new Dog();
        d2.name="饺子";
        d2.age=2;
        d2.weight=12;
        d2.color="白色";
        System.out.println(d2.name);
        System.out.println(d2.age);
        System.out.println(d2.weight);
        System.out.println(d2.color);

        System.out.println("-----------------");
        //第三只狗信息管理
        Dog d3= new Dog();
        d3.name="小黑";
        d3.age=3;
        d3.weight=14;
        d3.color="黄色";
        System.out.println(d3.name);
        System.out.println(d3.age);
        System.out.println(d3.weight);
        System.out.println(d3.color);
    }
}

1.2.2 面向对象表示学生

ooptest2.Student
java 复制代码
package com.itstudy.opptest2;
// 2.利用面向对象思想表示学生(属性:名字,性别,年龄,身高)
public class Student {

        String name;//名字
        String sex;//性别
        int age;//年龄
        double height;//身高

}
ooptest2.Test
java 复制代码
package com.itstudy.opptest2;

public class Test {
    public static void main(String[] args) {
        // 创建对象记录第一个学生信息管理
        Student s1 = new Student();
        s1.name = "张三";
        s1.sex = "男";
        s1.age = 18;
        s1.height = 1.8;

        // 输出第一个学生信息
        System.out.println(s1.name);
        System.out.println(s1.sex);
        System.out.println(s1.age);
        System.out.println(s1.height);

        System.out.println("-----------------");
        //第二个学生信息管理
        Student s2 = new Student();
        s2.name = "李四";
        s2.sex = "男";
        s2.age = 19;
        s2.height = 1.9;
        System.out.println(s2.name);
        System.out.println(s2.sex);
        System.out.println(s2.age);
        System.out.println(s2.height);

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

        //第三个学生信息管理
        Student s3 = new Student();
        s3.name = "王五";
        s3.sex = "男";
        s3.age = 20;
        s3.height = 2.0;
        System.out.println(s3.name);
        System.out.println(s3.sex);
        System.out.println(s3.age);
        System.out.println(s3.height);
    }
}

1.2.3 面向对象表示手机

ooptest3.Phone
java 复制代码
package com.itstudy.opptest3;

// 3.课堂作业:利用面向对象思想表示手机(属性:品牌,颜色,价格)
public class Phone {
    String brand;
    String color;
    double price;


}
ooptest3.Test
java 复制代码
package com.itstudy.opptest3;

public class test {
    public static void main(String[] args) {
        //第一个手机信息管理
        Phone p1 = new Phone();
        p1.brand = "小米";
        p1.color = "黄色";
        p1.price = 1000;
        System.out.println(p1.brand);
        System.out.println(p1.color);
        System.out.println(p1.price);

        System.out.println("-----------------");
        //第二个手机信息管理
        Phone p2 = new Phone();
        p2.brand = "华为";
        p2.color = "白色";
        p2.price = 2000;
        System.out.println(p2.brand);
        System.out.println(p2.color);
        System.out.println(p2.price);

        System.out.println("-----------------");
        //第三个手机信息管理
        Phone p3 = new Phone();
        p3.brand = "oppo";
        p3.color = "黄色";
        p3.price = 3000;
        System.out.println(p3.brand);
        System.out.println(p3.color);
        System.out.println(p3.price);
    }
}

1.3 面向对象的小细节

1.3.1 小细节描述

1.3.2 属性、行为练习

例:面向对象思想表示老师

ooptest4.Teacher
java 复制代码
package com.itstudy.ooptest4;

// 利用面向对象思想表示教师(属性:名字,年龄   行为:授课,吃饭,睡觉)
public class Teacher {
    // 属性:名字,年龄
    String name;//名字
    int age;//年龄

    // 行为:授课,吃饭,睡觉
    public void teach(){
        System.out.println("我正在授课");
    }
    public void eat(){
        System.out.println("我正在吃饭");
    }
    public void sleep(){
        System.out.println("我正在睡觉");
    }
}
ooptest4.Test
java 复制代码
package com.itstudy.ooptest4;

public class Test {
    public static void main(String[] args) {
        // 创建对象记录第一个教师信息管理
        Teacher t1 = new Teacher();
        t1.name = "张三";
        t1.age = 30;
        t1.teach();
        t1.eat();
        t1.sleep();
        System.out.println("-----------------");

        Teacher t2 = new Teacher();
        t2.name = "<UNK>";
        t2.age = 35;
        t2.teach();
        t2.eat();
        t2.sleep();
    }
}

3 面向对象中的数据安全问题

3.1 private关键字

3.2 get/set方法

3.3 练习--小狗

ooptest5.Dog

java 复制代码
package com.itstudy.opptest5;

public class Dog {
    // 属性:姓名、年龄
    private String name;//姓名
    private int age;//年龄

    //set/get方法

    // 方法:设置姓名 set方法
    //value:表示将来要赋的值  (小白)
    public void setName(String value){

        //给对象中的属性进行赋值
        name=value;
    }
    // 方法:获取姓名  get方法
    public String getName(){
        return name;
    }

    // 方法:设置年龄  set方法
    public void setAge(int num){

        //给对象中的属性进行赋值
        if(num >= 0 && num <= 15){
            this.age = num;
        } else{
            System.out.println("当前的" + num + "不在合理范围");
        }
    }
    // 方法:获取年龄   get方法
    public int getAge(){
        return age;
    }

    // 行为:吃骨头
    public void eat(){
        System.out.println(age + "岁的" + name + ",正在吃骨头" );
    }

}

ooptest5.Test

java 复制代码
package com.itstudy.opptest5;

public class Test {
    public static void main(String[] args) {
       /* 练习 面向对象练习:小狗
                需求内容
        小狗有属性:姓名、年龄。
        行为:吃骨头
                实现以下需求
        要求 1:小狗的年龄:0 ~ 15 岁
        要求 2:打印小狗所有的信息:小白,2 岁
        要求 3:调用吃骨头的方法打印效果:2 岁的小白,正在吃骨头
        */

        Dog d1 = new Dog();
        d1.setAge(2); //赋值
        d1.setName("小白"); //赋值
        System.out.println(d1.getName() + "," + d1.getAge() + " 岁"); //获取值
        d1.eat(); //调用行为方法

    }
}

3.4 总结

3.5 课堂巩固

练习--学生信息

ooptest6.Student
java 复制代码
package com.itstudy.ooptest6;
/*
       在校学生有属性:姓名、年龄、身高、体重。
        行为:学习。
        实现以下需求
        要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        要求 2:大二期间张三体重增加了 10kg
        要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        要求 4:打印大学毕业之后,张三的所有信息

* */
public class Student {

    //属性
    private String name;//姓名
    private int age;//年龄
    private int height;//身高
    private int weight;//体重


    //get/set方法

    //姓名
    public void setName(String value) {
        name=value;
    }

    public String getName() {
        return name;
    }
    //年龄
    public void setAge(int value) {
            age=value;
    }
    public int getAge() {
        return age;
    }

    //身高
    public void setHeight(int value) {
            height=value;

    }
    public int getHeight() {
        return height;
    }

    //体重
    public void setWeight(int value) {
            weight=value;
    }
    public int getWeight() {
        return weight;
    }


    //行为 学习
    public void learn() {
        System.out.println("努力学习。");
    }


}
ooptest6.Test
java 复制代码
package com.itstudy.ooptest6;

public class Test {
    public static void main(String[] args) {
       /*
       在校学生有属性:姓名、年龄、身高、体重。
        行为:学习。
        实现以下需求
        要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        要求 2:大二期间张三体重增加了 10kg
        要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        要求 4:打印大学毕业之后,张三的所有信息

* */
        Student s1=new Student();

        /*要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        要求 2:大二期间张三体重增加了 10kg
        要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        要求 4:打印大学毕业之后,张三的所有信息 */

       // 要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
       // 隐藏逻辑:年龄每年增加+1
        s1.setName("张三");
        s1.setAge(18);
        s1.setHeight(183);
        s1.setWeight(60);
        System.out.print("大一新生,"+s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg,刚进大学");
        s1.learn();

        // 要求 2:大二期间张三体重增加了 10kg
        s1.setAge(s1.getAge()+1);
        int newWeight=s1.getWeight()+10;
        s1.setWeight(newWeight);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");


        // 要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        s1.setAge(s1.getAge()+1);
        int newHeight=s1.getHeight()+2;
        s1.setHeight(newHeight);

        newWeight=s1.getWeight()-3;
        s1.setWeight(newWeight);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");

        // 要求 4:打印毕业之后,张三的所有信息
       //刚上大四的年龄
        s1.setAge(s1.getAge()+1);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");

        //大四毕业以后的年龄
        s1.setAge(s1.getAge()+1);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
    }
}

4 this关键字

4.1 this关键字

4.1.1 变量区分

4.1.2 this关键字使用

4.2 练习

4.2.1 练习1 --看代码,说结果

输出为:

10

0

this.变量名使用的是成员变量

当不用this关键字时,遵循的是就近原则

ooptest7.Student
java 复制代码
package com.itstudy.ooptest7;

public class Student {
    private int age;

    public void setAge() {
        int age=10;
        System.out.println(age);
        System.out.println(this.age);
    }
}
ooptest7.Test
java 复制代码
package com.itstudy.ooptest7;

public class Test {
 public static void main(String[] args) {
     Student s=new Student();

     s.setAge();
 }
}

4.2.2 练习2 --代码改进

ooptest8.Student --改进
java 复制代码
package com.itstudy.ooptest8;
/*
       在校学生有属性:姓名、年龄、身高、体重。
        行为:学习。
        实现以下需求
        要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        要求 2:大二期间张三体重增加了 10kg
        要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        要求 4:打印大学毕业之后,张三的所有信息

* */
public class Student {

    //属性
    private String name;//姓名
    private int age;//年龄
    private int height;//身高
    private int weight;//体重


    //get/set方法

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

    public String getName() {
        return name;
    }
    //年龄
    public void setAge(int age) {
        this.age=age;
    }
    public int getAge() {
        return age;
    }

    //身高
    public void setHeight(int height) {
        this.height=height;

    }
    public int getHeight() {
        return height;
    }

    //体重
    public void setWeight(int weight) {
        this.weight=weight;
    }
    public int getWeight() {
        return weight;
    }


    //行为 学习
    public void learn() {
        System.out.println("努力学习。");
    }


}
ooptest8.Test --没变
java 复制代码
package com.itstudy.ooptest8;

public class Test {
    public static void main(String[] args) {
       /*
       在校学生有属性:姓名、年龄、身高、体重。
        行为:学习。
        实现以下需求
        要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        要求 2:大二期间张三体重增加了 10kg
        要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        要求 4:打印大学毕业之后,张三的所有信息

* */
        Student s1=new Student();

        /*要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        要求 2:大二期间张三体重增加了 10kg
        要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        要求 4:打印大学毕业之后,张三的所有信息 */

        // 要求 1:大一新生,张三,18 岁,183cm,60kg,刚进大学努力学习。
        // 隐藏逻辑:年龄每年增加+1
        s1.setName("张三");
        s1.setAge(18);
        s1.setHeight(183);
        s1.setWeight(60);
        System.out.print("大一新生,"+s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg,刚进大学");
        s1.learn();

        // 要求 2:大二期间张三体重增加了 10kg
        s1.setAge(s1.getAge()+1);
        int newWeight=s1.getWeight()+10;
        s1.setWeight(newWeight);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");


        // 要求 3:大三期间张三减肥成功,身高增加 2cm,体重减少 3kg
        s1.setAge(s1.getAge()+1);
        int newHeight=s1.getHeight()+2;
        s1.setHeight(newHeight);

        newWeight=s1.getWeight()-3;
        s1.setWeight(newWeight);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");

        // 要求 4:打印毕业之后,张三的所有信息
        //刚上大四的年龄
        s1.setAge(s1.getAge()+1);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");

        //大四毕业以后的年龄
        s1.setAge(s1.getAge()+1);
        System.out.println(s1.getName()+","+s1.getAge()+"岁,"+s1.getHeight()+"cm,"+s1.getWeight()+"kg");
    }
}

4.3 总结

5 构造方法

5.1 构造方法的定义

5.2 构造方法的格式

5.3 构造方法的使用

5.3.1 特点与执行时机

5.3.2 练习

ooptest9 Student
java 复制代码
package com.itstudy.ooptest9;

public class Student {
    //属性:姓名、年龄、性别、身高
    private String name;//姓名
    private int age;//年龄
    private String sex;//性别
    private int height;//身高

    //空参构造方法
    public Student() {
    }

    //带全部参数的构造方法
    public Student(String name, int age, String sex, int height) {
        this.name=name;
        this.age=age;
        this.sex=sex;
        this.height=height;
    }

    //get/set方法
    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 String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getHeight() {
        return height;
    }
    public void setHeight(int height) {
        this.height = height;
    }
}
ooptest9 Test
java 复制代码
package com.itstudy.ooptest9;

public class Test {
    public static void main(String[] args) {
/*        学生信息
        定义一个 JavaBean 类描述学生
        属性:姓名、年龄、性别、身高*/

        //创建对象
        Student s1=new Student();
        System.out.println(s1.getName());
        System.out.println(s1.getAge());
        System.out.println(s1.getSex());
        System.out.println(s1.getHeight());


        Student s2=new Student("张三",18,"男",183);
        System.out.println(s2.getName());
        System.out.println(s2.getAge());
        System.out.println(s2.getSex());
        System.out.println(s2.getHeight());
    }

}

输出结果为:

null

0

null

0

张三

18

183

5.4 构造方法注意事项

6 章节总结

6.1 面向对象总结

6.2 练习

6.2.1 构造方法生成快捷键

复制代码

6.2.2 get/set方法快捷键

6.2.3 练习代码

ooptest10 Student
java 复制代码
package com.itstudy.ooptest10;

public class Student {
    //属性:姓名 年龄
    // 行为:学习,吃饭,睡觉

    private String name;
    private int age;

    //构造方法快捷键 alt+(Fn)+insert
    // Constructor  构造方法
    // 空参构造,可以选择Select None 或者 两次Tab+Enter

    public Student() {
    }
    //带全部参数的构造方法 全选回车
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }


    //get/set方法快捷键 alt+(Fn)+insert
    // Getters and Setters
    //全选回车
    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 void study(){
        System.out.println(name+"正在学习");
    }
    public void eat(){
        System.out.println(name+"正在吃饭");
    }
    public void sleep() {
        System.out.println(name + "正在睡觉");
    }

}
ooptest10 Test
java 复制代码
package com.itstudy.ooptest10;

public class Test {
    public static void main(String[] args) {
/* 练习 Javabean 类的练习:学生类
        定义一个 Javabean 类描述学生:
        属性:姓名 年龄
        行为:学习,吃饭,睡觉*/

        //创建对象 空参构造方法
        Student s1=new Student();
        s1.setName("张三");
        s1.setAge(18);
        System.out.println(s1.getName());
        System.out.println(s1.getAge());

        //调用行为方法
        s1.study();
        s1.eat();
        s1.sleep();

        //创建对象 带全部参数的构造方法
        Student s2=new Student("李四",20);
        System.out.println(s2.getName());
        System.out.println(s2.getAge());
        s2.study();
        s2.eat();
        s2.sleep();

    }
}