07_Java面向对象基础

Java面向对象基础

一、类和对象

1、什么是对象:

万物皆对象,客观存在的事物皆可为对象

2、面向对象:

关注事物的信息,对事物的属性和行为有一定了解

3、什么是类:

对生活中一类具有共同属性和行为的事物的抽象

类的特点:

​ 类是对象的数据类型

​ 类是具有相同属性和行为的一组对象的集合

4、什么是对象的属性:

对象具有的各种特征,每个对象的每个属性都拥有特定的值

5、什么是对象的行为:

对象能够执行的操作

6、类和对象的关系:

类:是对显示生活中一类具有共同属性和行为的事物的抽象

对象:是能够看得到摸的着的真实存在的实体

创建对象相当于,将类实体化。从一些对象中获取共同特征构建一个类,是将对象抽象化。

7、类的定义:

1、类是Java中基本的组成单位

2、类的组成:属性和行为

属性:在类中通过成员变量来体现(类中方法外的变量)

行为:在类中通过成员方法来体现(和前面的方法相比去掉的static关键字即可)

3、定义步骤:

​ 定义类、编写成员变量、编写类的成员方法

package com.itheima;
/*
创建一个手机类
 */
public class Phone {
    //成员变量
    String brand;
    int price;

    //成员方法
    public void call(){
        System.out.println("打电话");
    }

    public void sendMessage(){
        System.out.println("发短信");
    }
}
8、对象的使用:

1、创建对象:

格式:类名 对象名 = new 类型();

2、使用对象

格式:对象名.变量名 对像名.方法名();

package com.itheima;//在一个包中,此类定义在上一个java class中


public class PhoneDemo {
    public static void main(String[] args){
        //创建对象
        Phone p = new Phone();  //new出来的对象在堆内存中有初始值


        //使用成员变量
        System.out.println(p.brand);
        System.out.println(p.price);

        //给类对象赋值
        p.brand = "小米";
        p.price = 2999;

        System.out.println(p.brand);
        System.out.println(p.price);

        p.call();

        p.sendMessage();

    }
}
9、类和对象的案例学生:
package com.itheima02;
/*
学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

        //使用对象
        System.out.println(s.name + "," + s.age);

        //属性赋值
        s.name = "张三";
        s.age = 30;

        System.out.println(s.name + "," + s.age);

        s.study();
        s.doHomework();
    }
}

二、对象的内存图

属性在堆内存,行为在栈内存(与前面的内存分区类似)

1、单个对象:

略 属性分配到堆区,行为分配到栈区

package com.itheima03;
/*
创建对象
 */
public class StudentDemo01 {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        System.out.println(s);

        //使用对象
        System.out.println(s.name + "," + s.age);

        //属性赋值
        s.name = "张三";
        s.age = 30;

        System.out.println(s.name + "," + s.age);

        //使用成员方法
        s.study();
        s.doHomework();
    }
}
2、多个对象:

略 每个对象属性分别分配首地址在堆区,行为共用

package com.itheima03;
/*
创建多个对象
 */
public class StudentDemo02 {
    public static void main(String[] args) {
        //创建第一个对象
        Student s1 = new Student();

        s1.name = "张三";
        s1.age = 20;

        System.out.println(s1.name + "," + s1.age);
        s1.study();
        s1.doHomework();

        //创建第二个对象
        Student s2 = new Student();

        s1.name = "李四";
        s1.age = 28;

        System.out.println(s1.name + "," + s1.age);
        s2.study();
        s2.doHomework();
    }
}
3、多个对象向相同:

略 由于是分配到地址值,一个修改所有都会被修改

package com.itheima03;
/*
多个对象指向相同
 */
public class StudentDemo03 {
    public static void main(String[] args) {
        //创建第一个对象
        Student s1 = new Student();

        s1.name = "张三";
        s1.age = 20;

        System.out.println(s1.name + "," + s1.age);

        //把第一个对象的地址值赋值给第二个对象
        Student s2 = s1;

        s1.name = "李四";
        s1.age = 28;

        System.out.println(s1.name + "," + s1.age);
        System.out.println(s1.name + "," + s2.age);
    }
}

三、成员变量和局部变量

1、什么是成员变量和局部变量:

成员变量:类中方法外的变量

局部变量:方法中的变量(语句块中执行后就会被自动销毁的变量)

2、成员变量和局部变量的区别:

区别 成员变量 局部变量
类中位置不同 类中方法外 方法内或者方法声明上
内存位置不同 堆内存 栈内存
生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同 有默认的初始化值 没有默认值的初始化,必须先定义,赋值,才能使用

四、封装

1、private关键字:

1、是一个权限修饰符

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

​ 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。

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

​ 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰

​ 提供"set变量名(参数)"方法,用于设置成员变量的值,方法中用public修饰

3、参考代码:

//Student类	同属于包com.itheima05
package com.itheima05;
/*
学生类
 */
public class Student {
    //成员变量
    private String name;
    private int age;

    //get/set方法
    public void setName(String n){
        this.name = n;
    }

    public String getName(){
        return this.name;
    }

    public void setAge(int a){
        if(a < 0 || a > 120){
            System.out.println("你输入的年龄不符合要求");
        }
        else{
            this.age = a;
        }
    }

    public int getAge(){
        return this.age;
    }

    public void show(){
        System.out.println(this.name + "," + this.age);
    }
}
//StudentDemo测试类
package com.itheima05;
/*
学生测试类
 */
public class StudentDemo {
    public static void main(String[] args){
        //创建对象
        Student s = new Student();

        //调用set方法给成员变量赋值
        s.setName("张三");
        s.setAge(30);

        //s.show(); //给出一个固定的格式

        //使用get方法获取成员变量的值   得到一个自己想要的格式
        System.out.println(s.getName() + "----" + s.getAge());
    }
}
2、this关键字:

1、this修饰的变量用于指代成员变量:

​ 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量

​ 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

2、什么时候使用this呢?

​ 解决局部变量与成员变量同名时,将成员变量隐藏的问题

3、this:代表所在类的对象引用

​ 记住:方法被哪个对象调用,this就代表那个对象

4、this的内存原理:

this获取当前调用类方法的对象,即获取对象所拥有的地址值

3、封装:

1、封装的概述:

是面向对象的三大特征之一(封装、继承、多态)

是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部,外界是无法直接操作的

2、封装原则:

将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

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

3、封装的好处:

通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性

五、构造方法

1、构造方法的定义:

1、构造方法的概述:构造方法是一种特殊的方法其作用就是用来创建对象的

2、构造方法的格式:

public class 类名{
    修饰符 类名(参数){
        //构造方法的方法体
    }
}

3、构造方法的功能:主要是完成对象数据的初始化

2、构造方法的注意事项:

1、构造方法的重建:

未提供构造方法时,系统会自动给出一个无参无实现的构造方法

如果定义了有参构造方法系统将不会提供默认的构造方法,还需使用时自行手动提供

2、构造方法的重载:

根据方法重载的定义来看,可根据参数个数,顺序,类型来重载构造方法(对于构造方法而言后两种无意义)

3、推荐使用方式:

无论是否使用,都手动书写无参构造方法

3、标准类的制作:

1、成员变量:

使用private修饰

2、构造方法:

提供一个无参构造方法

提供一个带多个参数的构造方法

3、成员方法:

提供每一个成员变量对象的setXxx() / getXxx()

提供一个显示对象信息的show()

4、创建对象并为其成员变量赋值的两种方式:

无参构造方法创建对象后使用setXxx()赋值

使用带参构造方法直接创建带有属性值的对象

5、参考代码:

//标准Student类
package com.itheima09;
/*
标准类的制作
 */
public class Student {
    //成员变量  (分配在堆区:为赋值时以堆区各个类型初始值为准)
    private String name;
    private int age;

    //无参构造
    public Student(){};

    //有参构造
    public Student(String name, int age){
        this.name = name;
        this.age = age;
    }

    //定义set/get/show方法
    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 show(){
        System.out.println(name + "," + age);
    }

}
//测试标准类
package com.itheima09;
/*
测试标准学生类
 */
public class StudentDemo {
    public static void main(String[] args){
        //使用无参构造创建对象
        Student s1 = new Student();
        s1.setName("张三");
        s1.setAge(20);
        s1.show();

        //使用有参构造创建对象
        Student s2 = new Student("李四", 22);
        s2.show();
    }
}
posted @ 2022-09-28 13:38  如此而已~~~  阅读(21)  评论(0编辑  收藏  举报