类 对象 封装

简介: 类 对象 封装


                                坚信自己,人生往往柳暗花明。

                                                                                             ----DJ懒洋洋

一:类 对象

  类(class)和对象 (object)是两种以计算机为载体的计算机语言的合称。 对象是对客观事物的抽象,类是对对象的抽象。 类是一种抽象的数据类型。 它们的关系是,对象是类的实例,类是对象的模板。在java中,所有的一切皆可对象,即对象的属性和行为由类进行组织,类产生对象。

关系图如图所示:

 1):那么,java语言当中该如何创建类呢?

上图是对类的定义做个总结,接下来我们来看代码:

//ClassName--->即类型,遵循大驼峰的命名方式
class ClassName{
    //fields---->字段:描述成员属性
    //method--->方法:描述成员行为
}
//以学生类为例
class Student{
   public String name;
   public int age;
   public  void eat(){
   System.out.printli("好好学习,天天向上")
}
}

2):如何实例化对象

 以学生为例,实例化对象,关键字:new,我们通过一张图来看一下。

代码实现:

class test1{
    public static void main(String[] args) {
        Student student =new Student();
        Student student1=new Student();
        System.out.println(student);
        System.out.println(student1);
    }
}

如何调用创建对象的方法呢?进行解应用,关键符号:.

student.study();

运行结果:

3):this关键字的使用

 this:代表当前对象进行使用。我们来看如下代码,看看会发生哪些错误:

注意: this(...)必须是构造方法中第一条语句

class TestDate{
    //成员属性
    public int day;
    public int month;
    public int year;
    //成员行为
    public void setDate(int day,int month,int year){
        //此时参数和成员变量的命名相同
        day=day;
        month=month;
        year=year;
    }
    public void printDate(){
        System.out.println("年:"+year+"月:"+month+"日:"+day);
    }
}
class test2{
    public static void main(String[] args) {
        TestDate date=new TestDate();
        date.setDate(10,10,2022);
        date.printDate();
    }
}
//从代码来看,是要将年月日进行打印。即打印的为2022年10月10日

代码运行如下:

结果并不如我们预期那样,会打印2022年10月10日,而是0年0月0日,在java当中,当我们创建类时,成员行为中,局部变量高于成员变量,即在setDate这个成员行为中,局部变量year,month,day是在给自己赋值,等到这个成员行为结束后,局部变量的值被释放掉,而成员变量自始至终都没有赋值,即还是0.

那么,我们加入this关键字,能不能解决这一问题呢?

class TestDate{
    //成员属性
    public int day;
    public int month;
    public int year;
    //成员行为
    public void setDate(int day,int month,int year){
        //此时参数和成员变量的命名相同
         this.day=day;
         this.month=month;
         this.year=year;
    }
    public void printDate(){
        System.out.println("年:"+year+"月:"+month+"日:"+day);
    }
}
class test2{
    public static void main(String[] args) {
        TestDate date=new TestDate();
        date.setDate(10,10,2022);
        date.printDate();
    }
}

运行效果:

可见,this关键字可以解决这一问题,即通过this关键字可以告诉编译器当前是哪个对象在调用成员属性和成员行为。

this的特性:

4):构造方法

  作用:对对象的各个属性进行初始化。

//如何进行构造 权限修饰符 +类名 (参数列表){}
public class Animal {
    public String name;
    public int age;
    public Animal(){
        //空参构造
    }
    public  Animal(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void print(){
        System.out.println("动物的姓名:"+this.name+"动物的年龄:"+this.age);
    }
}
class test{
    public static void main(String[] args) {
        Animal animal=new Animal();//空参构造的实例化
        Animal animal1=new Animal("小狗",18);
        animal.print();
        animal1.print();
    }
}

  可见,在空参构造时,所有的成员属性均被初始化,即String类型的引用变量赋值为null,int类型的为0,在实参构造中,我们对成员变量进行了赋值,此时,所对应的各个属性均有了我们想要赋的值。同时,空参构造和实参构造属于java里面的方法重载。

方法重载:

   1:方法名相同

   2:参数列表不同(参数类型不同,参数列表不同)

   3:返回值类型不做要求。

此外,空参构造是默认的,即不写也可以完成空参构造,但当写实参构造时,空参构造就不是默认的,需要我们进行手动添加。

5):默认初始化

  在java中,如果在main函数中,变量不进行赋值,会报错,但是,在类中,如果我们不对成员变量进行赋值,那么,会有默认对应的初始化值,如下图所示:

二:封装

1):封装的概念:

  在java当中,如果自己实现的内部细节不想被别人看见,我们就可以进行封装,即套壳屏蔽细节。将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

关键字:private,即私有化成员变量。在此之前,我们先了解访问权限修饰符。每个修饰符对应的使用权限。

在封装中,我们使用的是private关键字,即别人不能看见成员属性和成员行为的细节,即只能在同一包中的同一类进行使用。那么,如果,我们进行了封装,想要用,怎么办?这时候,我们可以用public访问权限修饰符,对其私有化的成员变量进行赋值和访问。

代码如下:

public class Person {
    private String name;
    private int age;
    private String id;
    public Person() {
    }
    public Person(String name, int age, String id) {
        this.name = name;
        this.age = age;
        this.id = id;
    }
    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 getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}
class test3{
    public static void main(String[] args) {
       Person person=new Person();
       person.setName("李华");
       person.setAge(18);
       person.setId("1");
        System.out.println("姓名:"+person.getName()+" 年龄:"+person.getAge()+" 编号"+person.getId());
    }
}

运行结果:

2):static关键字

static关键字是java中较为重要的关键字,即可以修饰成员变量和成员方法。

static修饰成员变量:---->假设:我们创建了三个学生对象,而三个学生恰好在一个教室里,这时候我们就可以使用static关键字来减少代码的使用。

代码如下:

public class Student {
    private String name;
    private int age;
    private int id;
    public static  String classRoom="301";
    public Student() {
    }
    public Student(String name, int age, int id) {
        this.name = name;
        this.age = age;
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public Student setName(String name) {
        this.name = name;
        return this;
    }
    public int getAge() {
        return age;
    }
    public Student setAge(int age) {
        this.age = age;
        return this;
    }
    public int getId() {
        return id;
    }
    public Student setId(int id) {
        this.id = id;
        return this;
    }
    public static String getClassRoom() {
        return classRoom;
    }
    public static void setClassRoom(String classRoom) {
        Student.classRoom = classRoom;
    }
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
}
class test4{
    public static void main(String[] args) {
        Student student=new Student("小李",18,1);
        System.out.println(student);
        Student student1=new Student("小华",19,2);
        System.out.println(student1);
        Student student2=new Student("小明",18,3);
        System.out.println(student2);
        //调用类里面的静态成员变量
        System.out.println(Student.classRoom);
    }
}

由上述代码可知,静态成员变量需要用类名.静态成员变量来使用。Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的,因此,成员方法也需要通过类名.成员方法来使用。

【静态方法特性】

1. 不属于某个具体的对象,是类方法

2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者

3. 不能在静态方法中访问任何非静态成员变量

欢迎各位大佬前来批评指正。谢谢大家

目录
打赏
0
相关文章
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
294 2
阿里云百炼xWaytoAGI共学课DAY3 - 更热门的多模态交互案例带练,实操掌握AI应用开发
本文章旨在帮助读者了解并掌握大模型多模态技术的实际应用,特别是如何构建基于多模态的实用场景。文档通过几个具体的多模态应用场景,如拍立淘、探一下和诗歌相机,展示了这些技术在日常生活中的应用潜力。
1731 20
每日一道面试之byte类型127+1等于多少?
每日一道面试之byte类型127+1等于多少?
319 0
Servlet 教程 之 Servlet 异常处理 6
该教程介绍了Servlet异常处理的示例,创建了一个名为`ErrorHandler`的Servlet,它捕获并显示错误和异常信息。当错误或异常发生时,通过web.xml配置错误页面映射到这个Servlet。当访问不存在的Servlet或触发异常时,`ErrorHandler`会显示错误代码、异常类型、Servlet名称和请求URI等详细信息。用户需将类编译后放入Tomcat的classes目录,并在web.xml中配置错误处理映射。
104 0
如何开发一个人人爱的组件?
本篇文章类似一个菜谱,比较零碎的记录一些组件设计的内容,作者分别按照 1~5 星 区分其重要性。
Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库
Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库
264 0
c++msdn、RedHatlinux5、win7分区x-AcronisDiskDirector 下载
c++msdn帮助文件下载地址 ed2k://|file|%5BMicrosoft.Visual.Studio6.0.MSDN.Library%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%E7%89%88%5D.
1187 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等