Java基础——面向基础模块

面向对象基础

1.类和对象

1.1 什么是对象

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

1.2 什么是面向对象

面向一个具体的对象来进行操作(买手机)

1.3 什么是类

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

类的特点:
类是对象的数据类型
类是具有相同属性和行为的一组对象的集合
1.4 什么是对象的属性

属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值(手机:2999;内存:16G)

1.5 什么是对象的行为

行为:对象能够执行的操作(手机可以用来打电话,发短信)

1.6 类和对象的关系

类:是对现实生活中一类具有共同属性和行为的事物的抽象(人)

对象:是能够看得到摸得到的真实存在的实体(张三)

关系:类是对象的抽象,对象是类的实体

1.7 类的定义

类的重要性:是Java程序的基本组成单位

类是什么:是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的输出和行为

类的组成:属性和行为

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BWgwdMFl-1651630383519)(Typora_image/256.png)]

新建模块myClass,在这个模块的src下新建com.myclass包,在这个包下新建类叫phone

package com.myclass;
//此时,/*点回车就会出现多行注释
/*
    类的定义
        类的定义步骤
            定义类
            编写类的成员变量
            编写类的成员方法
    手机类;
        类名:手机(phone)
        成员变量:品牌(brand),价格(price)
        成员方法:打电话(call),发短信(sendMessage)
 */
public class Phone {
    //成员变量
    String brand;
    int price;

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5Chi3BT-1651630383521)(Typora_image/257.png)]

1.8对象的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-texIYIZP-1651630383521)(Typora_image/258.png)]

package com.myclass;
/*
    创建对象
        格式:类名  对象名  = new 类名()
        范例: Phone p = new Phone();
    使用对象
        1.使用成员变量
            格式:对象.变量名
            范例:p.brand
        2.使用成员方法
            格式:对象名.方法名()
            范例:p.call()
 */
public class phoneDemo {
    //定义main方法
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone(); //new的都在堆内存,因为在Phone中只有定义,没有给值,所以打印了默认值

        //使用成员变量
        System.out.println(p.brand); //null 堆内存的默认值
        System.out.println(p.price); //0    堆内存的默认值

        //给成员变量赋值
        p.brand = "小米";
        p.price = 3999;
        System.out.println(p.brand);
        System.out.println(p.price);
        //使用成员方法
        p.call();
        p.sendMessage();

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wVpqhjLC-1651630383524)(Typora_image/259.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xp1btwNn-1651630383527)(Typora_image/175.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAsdlQKa-1651630383528)(Typora_image/260.png)]

1.9 案例:学生

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DoVbwEC1-1651630383530)(Typora_image/261.png)]

在Student.java文件里输入代码

package com.student;
/*
    学生类
 */
public class Student {
    //成员变量
    String name;
    int age;

    //成员方法
    public void study() {
        System.out.println("学习");
    }
    public void doHomeWork(){
        System.out.println("做作业");
    }
}

在StudentDemo.java文件里输入代码:(注意:这两个文件都在同一个包下)

package com.student;
/*
    学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        //使用对象
        System.out.println(s.name+","+s.age);  //此时输出的是初始值null,0

        //调用成员变量
        s.name = "张三";
        s.age = 18;
        System.out.println(s.name+","+s.age);
        //调用成员方法
        s.study();
        s.doHomeWork();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wGuFbgdM-1651630383531)(Typora_image/262.png)]

2.对象内存图

2.1对象内存图(单个对象)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0mo68cw-1651630383532)(Typora_image/263.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2FSpCd7O-1651630383535)(Typora_image/264.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z5TlA2S3-1651630383536)(Typora_image/265.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxfhJ4o6-1651630383537)(Typora_image/266.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eon47pAb-1651630383539)(Typora_image/267.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5iW3dk2G-1651630383543)(Typora_image/268.png)]

2.2 对象内存图(多个对象)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBYgPYw9-1651630383544)(Typora_image/269.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-trhmCWE4-1651630383546)(Typora_image/270.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3l7o4tFs-1651630383547)(Typora_image/271.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQdAjdRS-1651630383549)(Typora_image/272.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVmrdyHX-1651630383551)(Typora_image/273.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M7fvZi8y-1651630383552)(Typora_image/274.png)]

2.3 对象内存图(多个对象指向相同的内存)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IG4uWo7p-1651630383554)(Typora_image/275.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-471U2X38-1651630383555)(Typora_image/276.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gqomCaF-1651630383557)(Typora_image/277.png)]

3.成员变量和局部变量

3.1 什么是成员变量和局部变量

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

局部变量:方法中的变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IrU2c9ZI-1651630383560)(Typora_image/278.png)]

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

4.封装

4.1 private关键字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yb2Y21MC-1651630383561)(Typora_image/279.png)]

Student.java中输入代码:

package com.student;
/*
    学生类
 */
public class Student {
    //成员变量
    String name;
    //int age;
    private int age;

    //提供get/set方法用于获取和设置值
    public void  setAge(int a) {
//        age =a;
        if(a<0 || a>120) {          
            System.out.println("输入年龄有误");
        } else {
            age =a;
        }
    }
    public int getAge() {
        return age;
    }

    //成员方法
    public void show() {
        System.out.println(name+","+age);
    }
}

StudentDemo.java输入代码:

package com.student;
/*
    学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

        s.name = "张三";
        //s.age = 18;
        //s.age = -18; 此时可以直接修改,输出为-18,设置不让外界直接访问变量,做个判断
        s.setAge(-30);
        s.setAge(30);
        //调用show方法
        s.show();

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcjCFLhT-1651630383563)(Typora_image/280.png)]

4.2 private关键字的使用
一个标准类的编写
1.把成员变量用private修饰
2.提供对应的getXXX()/setXXX()方法

在com包下,新建包student_private,在这个包里新建Student.java和StudentDemo.java

在Student.java的代码如下:

package com.student_private;
/*
    学生类
 */
public class Student {
    //成员变量
    private String name;
    private int age;

    //get/set方法
    public void setName(String n) {
        name = n;
    }
    public String getName() {
        return name;
    }
    public  void setAge(int a) {
        age =a;
    }
    public int getAge() {
        return age;
    }
    public void show() {
        System.out.println(name +","+ age);
    }
}

在StudentDemo.java的代码如下:

package com.student_private;
/*
    学生类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

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

        s.show();
        //使用get方法获取成员变量的值
        System.out.println(s.getName()  + "-------" + s.getAge());
        System.out.println(s.getName() + ","+ s.getAge());
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U8SfoI56-1651630383564)(Typora_image/281.png)]

4.3 this关键字

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ker53dFd-1651630383566)(Typora_image/282.png)]

在com包下,新建包student01,在这个包里新建Student.java和StudentDemo.java

在Student.java的代码如下:

package com.student01;
/*
    学生类
 */
public class Student {
    //成员变量
    private String name;
    private int age;

    //get/set方法
    public void setName(String name) {
        name = name; //在测试项输出为null,18,因为此处传入的name为局部变量
        //this.name = name; //在测试项输出为张三,18,用this修饰的name为成员变量
    }
    public String getName() {
        return name;
    }
//    public  void setAge(int a) {
//        age =a;    //此处的 a与成员变量的age不同名,所以左侧的age就是成员变量,可以不加this修饰
//    }
    public  void setAge(int age) {
        this.age = age;  //此时为标准写法,此时形参与成员变量同名,带this为成员变量
    }
    public int getAge() {
        return age;
    }
    public void show() {
        System.out.println(name +","+ age);
    }
}

在StudentDemo.java的代码如下:

package com.student01;
/*
    学生类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

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

        s.show();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NpR0QMoM-1651630383568)(Typora_image/283.png)]

4.4this的内存原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ezCaFWHC-1651630383570)(Typora_image/284.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4xkEILa-1651630383571)(Typora_image/285.png)]

4.5 封装

1.封装概述

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

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

2.封装原则

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9bLI1SR-1651630383572)(Typora_image/286.png)]

3.封装的好处

1.通过方法来控制成员变量的操作,提高了代码的安全性(因为在方法中,是可以对数据进行安全校验的)

2.把代码用方法进行封装,提高了代码的复用性(每次使用,只需要调用就可以了)

5.构造方法

5.1构造方法概述

构造方法是一种特殊的方法

作用:创建对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8MyQDZMz-1651630383575)(Typora_image/287.png)]

在com包下,新建包student02,在这个包里新建Student.java和StudentDemo.java

Student.java的代码如下:

package com.student02;
/*
    学生类

    构造方法
        作用:创建对象
        功能:完成对象数据的初始化

    格式:
       修饰符   类名(参数) {

       }
    修饰符一般用:public
    格式化代码快捷键:ctrl +alt +l
 */
public class Student {
    //定义成员变量
    private String name;
    private  int age;

    //构造方法
    public Student() {
        System.out.println("无参构造方法");
    }

    //定义show()方法
    public void show() {
        System.out.println(name + "," + age);
    }
}

StudentDemo.java的代码如下:

package com.student02;
/*
    测试类
 */

public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();  //会调用Student里面构造的方法

        s.show();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I0v7cmRu-1651630383575)(Typora_image/288.png)]

5.2 构造方法的注意事项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y61ZLrXZ-1651630383577)(Typora_image/289.png)]

在com包下,新建包student03,在这个包里新建Student.java和StudentDemo.java

Student.java的代码如下:

package com.student03;
/*
    学生类
 */
public class Student {
   private String name;
   private int age;

   //手动给出无参的构造方法
   public Student(){}

    //构造方法一
    public Student(String name) {
       this.name = name;
   }
   //构造方法二
    public Student(int age) {
       this.age = age;
    }
    //构造方法三
    public Student(String name,int age) {
       this.name = name;
       this.age = age;
    }



   public void show() {
       System.out.println(name + ","+age);
   }
}

StudentDemo.java的代码如下:

package com.student03;
/*
    测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s1 = new Student();
        s1.show();

        //用构造方法一创建对象public Student(String name)
        Student s2 = new Student("张三");
        s2.show();

        //用构造方法二创建对象public Student(int age)
        Student s3 = new Student(18);
        s3.show();

        //用构造方法三创建对象public Student(int age)
        Student s4 = new Student("李四",19);
        s4.show();

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHRlMQ4w-1651630383580)(Typora_image/290.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-McAXJ5lx-1651630383580)(Typora_image/291.png)]

5.3 标准类的制作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sR47cnTw-1651630383582)(Typora_image/292.png)]

在com包下,新建包student04,在这个包里新建Student.java和StudentDemo.java

Student.java的代码如下:

package com.student04;
/*
    成员变量
        使用private修饰
    构造方法
        提供一个无参构造方法
        提供一个带多个参数的构造方法
    成员方法
        提供每一个成员变量对应的setXxx()/getXxx()
        提供每一个显示对象信息的show()
 */
public class Student {
    //成员变量
    private String name;
    private int age;

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

    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }

    //成员方法
    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);
    }
}

StudentDemo.java的代码如下:

package com.student04;
/*
    创建对象并为其成员变量赋值的两种方式
        1:无参构造方法创建对象后使用setXxx()赋值
        2:使用带参构造方法直接创建带有属性值的对象
 */
public class StudentDemo {
    public static void main(String[] args) {
        //无参构造方法创建对象后使用setXxx()赋值
        Student s1 = new Student();
        s1.setName("张三");
        s1.setAge(18);
        s1.show();

        //使用带参构造方法直接创建带有属性值的对象
        Student s2 = new Student("李四",19);
        s2.show();
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Talyeoj-1651630383583)(Typora_image/293.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚务必早点睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值