JavaSE基础学习day1--面向对象-封装

本文详细介绍了面向对象编程中的关键概念,包括类和对象的定义、属性和行为、类和对象的关系,以及成员变量、局部变量的区别。此外,文章还涵盖了封装的原理、private关键字的作用、this关键字的内存原理,以及构造方法的概述和注意事项。
摘要由CSDN通过智能技术生成

目录

1.类和对象

1.1什么是对象,面向对象,类

1.2什么是对象的属性,行为

1.3类和对象的关系

1.4类的定义

 1.5对象的使用

1.5.1创建对象

1.5.2使用对象

 1.5.3案例

2.对象内存图

2.1单个对象内存图

2.2多个对象内存图

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

3.成员变量与局部变量

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

3.2成员变量和局部变量的区别

4.封装

4.1private关键字

4.2this关键字

 4.3this内存原理

4.4封装

4.4.1封装概述

4.4.2封装原则

4.4.3封装好处

5.构造方法

5.1构造方法概述

5.2构造方法的注意事项

5.3标准类制作


1.类和对象

1.1什么是对象,面向对象,类

对象:万物皆对象,客观存在的事物都是对象。

面向对象:通过一些特征和条件以满足对象本身

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

类的特点:

对象的数据类型

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

1.2什么是对象的属性,行为

对象属性:每个对象的每个属性都有特定的值

对象的行为:每个对象都有特定的行为。

1.3类和对象的关系

类:对现实中具有共同属性和行为的事物的抽象

对象:现实生活中的实体

1.4类的定义

类的组成:属性和行为

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

行为:在类中通过成员方法体现(在方法中体现)

定义:

public class  类名{

    //成员变量
    变量1的数据类型 变量1;
    变量2的数据类型 变量2;
    变量3的数据类型 变量3;
    ......
    //成员方法
    方法1;
    方法2;
    ......
}

 1.5对象的使用

1.5.1创建对象

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

1.5.2使用对象

使用成员变量:

格式:对象名.变量名

使用成员方法

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

 1.5.3案例

需求:定义一个学生类,然后定义一个学生测试类,在学生测试类完成对学生类的成员变量和成员方法的使用。

pubblic class Student{
    //成员变量
    String name;
    int age;
    //成员方法
    public void study(){
        System.out.println("学生会学习");
    }
    public void doHomework(){
        System.out.println("学生每天要做作业");
    }
}
public class Test{
    public static void main(String[]args){
        //创建对象
        Student stu=new Student();
        //为成员变量赋值
        stu.name="小红";
        stu.age=16;
        System.out.println("姓名:"+stu.name+"年龄:"+stu.age);
        //调用成员方法
        stu.study();
        stu.doHomework();
    }
}

2.对象内存图

2.1单个对象内存图

public class StudentTest01{
    public static void main(String[]args){
        //创建对象
        Student s=new Student();
        //使用成员变量
        System.out.println(s.name+","+s.age);
        s.name="小明";
        s.age=31;
        System.out.println(s.name+","+s.age);
        //使用成员方法
        s.study();
        s.doHomework();
    }
}

 a.执行创建对象一行

main方法先进栈,堆内存中new一个新的空间,空间里自动存放student类中的成员变量,其地址值直接赋值给新建的变量s

b.输出s一行

直接访问main方法中的s,通过s的地址值在堆内存中找相应的变量值

c.赋值后再访问如上

d.执行调用方法一行

study是成员方法,将成员方法进栈,调用者s,输出相应的内容,输出完毕后,study方法退出栈

2.2多个对象内存图

public class StudentTest02{
    public static void main(String[]args){
        //创建对象
        Student s1=new Student();
        //使用成员变量
        System.out.println(s1.name+","+s1.age);
        s1.name="林青霞";
        s1.age=30;
        System.out.println(s1.name+","+s1.age);
        //使用成员方法
        s1.study();
        s1.doHomework();
        //创建第二个变量
        Student s2=new Student();
        //使用成员变量
        System.out.println(s2.name+","+s2.age);
        s2.name="张曼玉";
        s2.age=28;
        System.out.println(s2.name+","+s2.age);
        //使用成员方法
        s2.study();
        s2.doHomework();


    }
}

a.执行创建对象一行

main方法先进栈,堆内存中new一个新的空间,空间里自动存放student类中的成员变量,其地址值直接赋值给新建的变量s1

b.输出s1一行

直接访问main方法中的s,通过s的地址值在堆内存中找相应的变量值

c.赋值后再访问如上

d.执行调用方法一行

study是成员方法,将成员方法进栈,调用者s1,输出相应的内容,输出完毕后,study方法退出栈

e.创建第二个对象

在main方法中进行变量定义,堆内存中new一个新的空间,空间里自动存放student类中的成员变量,其地址值直接赋值给新建的变量s2

f.同上述一个:

g.study是成员方法,将成员方法进栈,调用者s2,输出相应的内容,输出完毕后,study方法退出栈,doHomework方法同理。

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

例:

public class StudentTest03{
    public static void main(String[]args){
            //创建对象
        Student s1=new Student();
        //使用成员变量
         s1.name="林青霞";
        s1.age=30;
        System.out.println(s1.name+","+s1.age);
        //创建第二个变量并将第一个对象的地址值赋给第二个
        Student s2=s1;
        //使用成员变量
        s2.name="张曼玉";
        s2.age=28;
        System.out.println(s1.name+","+s1.age);
        System.out.println(s2.name+","+s2.age);
    }
}

前几行执行同上述abc步骤

当执行到第二个对象的创建时,将对象s1的地址值赋值给s2,并指向堆内存。

之后修改s2的成员变量时,该地址值下的值也都被改变,再次输出s1和s2对应的成员变量时输出的都是修改后的内容。

3.成员变量与局部变量

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

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

局部变量:方法中的变量

3.2成员变量和局部变量的区别

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

4.封装

4.1private关键字

private:

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • 作用是保护成员不被别的类使用,被private修饰的成员只能在本类中才能访问
  • 针对private修饰的成员变量,如果需要被别的类使用,提供get变量名()方法,用于获取成员变量的值,方法用public修饰;提供set方法名(参数)方法,用于设置成员变量的值,方法用public修饰。
  • 在其他类调用本类方法的时候,若存在漏洞问题,则可以直接在本类增改相关代码

4.2this关键字

原Student类:

public class Student{
    String name;
    int age;
    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);
    }
}

 由于n和a无法第一眼看出name和age的本意,所以要用name和age代替

但是如果在方法体中直接写name和age,方法体中的name只会参照形参中的name,不会真正赋值给成员变量,故引入this关键字解决该问题(局部变量隐藏成员变量)

this.name=name;

用this修饰的变量是成员变量,没有this的则是局部变量

总结:

  • 用this修饰的变量是成员变量,没有this的则是局部变量
  • 解决局部变量隐藏成员变量的问题
  • this代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象

 4.3this内存原理

例:

public class Student{
    private String name;
    public String setName(String name){
        this.name=name;
    }
    public void getName(){
        return name;
    }
}
public class StudentDemo{
    public static void main(String []args){
        Student s1=new Student();
        s1.setName("林青霞");
        Student s2=new Stucent();
        s2.setName("张曼玉");
    }
}

 main和对象的内存图略,

当执行到s1=setName("林青霞");,首先setName()方法先入栈,并获取参数:name,再去看调用者为s1,执行该方法体中的语句,this.name对应s1获取参数的值,再指向堆中该地址下的参数进行s1的赋值操作。setName()完毕后从栈内存消失。

第二个对象:

之后方法使用完毕,消失,此时栈中只剩main方法,语句执行完毕,main方法消失。

综上this代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象。

4.4封装

4.4.1封装概述

  • 是面向对象的三大特征之一(封装、集成、多态)
  • 是面向对象编程语言对客观世界的摸你,客观世界里成员变量都是隐藏在对象内部的,外界是无法使用的

4.4.2封装原则

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

4.4.3封装好处

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

5.构造方法

5.1构造方法概述

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

作用:创建对象

格式:

public class 类名{

        修饰符 类名(){}

}

例如:

public class StudentDemo{

        public static void main(String[]args){

                Student s1=new Student();

        }

}

 此时Student()就是一个构造方法。

功能:主要是完成对对象数据的初始化

5.2构造方法的注意事项

1.构造方法的创建

  • 如果没有定义构造方法,系统将会给出一个默认的无参构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法

2.构造方法的重载

  • 如果自定义了带参构造方法,还要使用无参构造方法,就必须再写一个无参构造方法 

3.无论是否使用都手写无参构造方法 

5.3标准类制作

  1. 成员变量(private修饰)
  2. 构造方法(一个无参一个有参)
  3. 成员方法(get/set+显示show)
  4. 创建对象并为其成员变量赋值的两种方式(无参构造后用set/直接用有参构造)

例:

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);
    }

}

public class StudentTest{
    public static void main(String[]args){
    //无参构造方法
    Student s1=new Student();
    s1.setName("小白");
    s1.setAge(16);
    s1.show();
    //有参构造方法
    Student s2=new Student("Nick",18);
    s2.show();
    }
}

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
面向对象编程是一种编程范式,它将程序的构建和设计思路以面向对象的方式进行组织和实现。在Java中,面向对象编程是基于Java SE(Standard Edition)的一种编程方式。第07讲主要介绍了面向对象编程中的一些基本概念和关键术语。 在面向对象编程中,我们将程序中的数据和对数据的操作(方法)封装在一起,形成一个对象。对象由两部分构成:属性和方法。属性是用来描述对象的特征,而方法则是对象可以执行的操作。对象之间通过消息(方法调用)进行通信和交互。面向对象的核心思想是通过封装、继承和多态实现程序的复用和扩展。 封装面向对象编程中的一个重要概念,它指的是将类的属性和方法进行封装,使得外部无法直接访问和修改对象的内部状态,只能通过公共的方法来操作属性和执行方法。封装提供了一种将数据和行为组合在一起的方式,可以保护数据的完整性和安全性。 继承是面向对象编程中的另一个重要概念,它指的是通过定义一个新的类来继承现有类的属性和方法。通过继承,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和修改。继承提供了一种代码复用的机制,可以减少重复编码的工作量。 多态是面向对象编程的又一个重要概念,它指的是同一类型的对象在不同的情况下可以有不同的表现形式。多态通过方法的重写和方法的重载实现。方法的重写指的是在子类中重新定义和实现父类的方法,方法的重载指的是在同一个类中可以定义多个同名但参数列表不同的方法。 总结来说,面向对象编程是一种将程序组织和设计思路以对象为中心的编程方式。在JavaSE中,我们可以通过封装、继承和多态来实现面向对象编程的目标。封装可以提高程序的可维护性和可复用性,继承可以减少重复编码的工作量,多态可以灵活地操作对象。掌握这些基本概念和关键术语,可以帮助我们更好地理解和应用面向对象编程的思想。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yz不摆烂24124

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

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

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

打赏作者

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

抵扣说明:

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

余额充值