Java 类与对象重难点详解

 更新时间:2021年11月05日 14:17:25   作者:Lockey-s  
类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型

什么是类、对象?

因为计算机并不能像我们人这样去理解世界上的东西,所以为了更好的编辑,就抽象出了类和对象。类就是把功能放在一起,然后由一个人去调用这个功能,然后再编辑对应的功能。调用者就是对象的实现者

类和类的实例化

类是一类对象的统称,对象就是这一类具体化的实例
创建类的关键字:class

举例:我们坐年糕的模子就是一个类,而通过这个模子可以做出月饼。在这个例子当中,类就是模具,年糕就是实例化的对象。一个类可以实例化很多对象。举例:

class Person {
    public String name;
    public int age;
}
public static void main1(String[] args) {
    Person person1 = new Person();
    Person person2 = new Person();
    Person person3 = null;
}

Person 就是一个类,里面的 name 和 int 就是类的成员(字段)。这里的 person1 就是引用,指向的是后面 new 的对象,因为是引用,所以也可以指向 null 。person3 就是指向空(null)引用。person1 person2 person3 就是实例化的对象。

字段的初始化

字段就是类里面的成员。在创建这些成员的时候就可以初始化。例如:

class Person {
    public String name = "Lockey";
    public int age = 10;
}

这里就是创建的时候对其进行初始化。其实并不建议直接初始化,建议在类的调用者使用的时候再初始化。如下:

class Person {
    public String name;
    public int age;
}
public static void main(String[] args) {
    Person person1 = new Person();
    person1.name = "Lockey";
    person1.age = 10;
    System.out.println(person1.name);
    System.out.println(person1.age);
}

这里就是在类的调用者里面对类的字段进行赋值,在 main 方法当中通过引用调用。

在这里插入图片描述

类当中实现方法

就像上面的例子,如果类的调用者需要名字和年龄的时候,输出两行比较麻烦,类的实现者就可以在类内写一个方法,直接返回名字和年龄。示例:

class Person {
    public String name;
    public int age;
    public void print() {
        System.out.println("姓名:"+name+" 年龄:"+age);
    }
}
public static void main(String[] args) {
    Person person1 = new Person();
    person1.name = "Lockey";
    person1.age = 10;
    person1.print();
}

在这里插入图片描述

static 静态关键字

static 可以修饰方法,属性。要注意的是:static 修饰的变量通过类名访问。直接举例说明:

class Person {
    public int a;
    public static int count;
}
public static void main(String[] args) {
    Person person1 = new Person();
    person1.a++;
    person1.count++;
    System.out.println(person1.a);
    System.out.println(Person.count);
    Person person2 = new Person();
    person2.a++;
    person2.count++;
    System.out.println(person2.a);
    System.out.println(person2.count);
}

在这里插入图片描述

如图,count 第二次输出为 2 。这是因为 conut 是被 static 修饰的变量,被 static 修饰之后就变成了常量,就在静态区了。所以每个引用当中调用的 count 没变。所以第二次改变 count 的值的时候,就变成 2 了。当 static 修饰方法的时候,无需再创建对象,直接拿类名调用就行了。举例:

class Person {
    public static int count;
    public static void change() {
        count = 100;
    }
}
public static void main(String[] args) {
    Person.change();
    System.out.println(Person.count);
}

在这里插入图片描述

通过类名的调用直接访问 static 修饰的变量。

封装

因为代码实现的软件很复杂,所以就出现了类,但是为了阅读性更高,就出现了封装。就是把一个类的内容实现为只剩一个或几个接口,方便类的调用者访问,这样就降低了代码的复杂程度。

private 实现封装

private 就是修饰成员变量或方法的关键字,被 private 修饰之后,就不能被类外的调用者访问了。所以就可以配合 public 来实现对外的接口。例如:

class Person {
    private String name = "Lockey";
    private int age = 10;
    public void print() {
        System.out.println("名字是:"+name+" 年龄:"+age);
    }
}
public static void main(String[] args) {
    Person person = new Person();
    person.print();
}

在这里插入图片描述

这里就是利用 private 封装属性,使其只能在类内被访问到。而提供的 public 接口,就让类的调用者在类外就可以访问到了。所以在类外直接调用 print 方法就好了。

setter 和 getter 方法

当我们把字段(name age)设置为 private 属性时,就无法在类外进行初始化了,所以就又出现了新的方法:

setter :在类外直接调用此方法,然后设置一个值。

有了 setter 就又有了 getter 方法。getter 就是获取字段数的值。通过类外调用,将字段设置为此值。代码示例:

class Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name1) {
        name = name1;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age1) {
        age = age1;
    }
    public void print() {
        System.out.println("名字是:"+name+" 年龄:"+age);
    }
}
public static void main(String[] args) {
    Person person = new Person();
    person.setName("Lockey");
    person.getName();
    person.setAge(10);
    person.getAge();
    person.print();
}

在这里插入图片描述

这里就是调用 getter 和 setter 方法,在类外进行访问,因为 private 对 name 和 age 做了封装。

构造方法

方法名和类名是相同的,且构造方法没有返回值。调用完构造方法之后,对象才会产生。

一个对象的产生:
1 为对象分配内存。
2 调用合适的构造方法。

class Person {
    public Person() {
        System.out.println("Person 不带参数的构造方法");
    }
}
public static void main(String[] args) {
    Person person = new Person();
}

在这里插入图片描述

这里就是实例化类的对象的时候调用的构造方法,因为我们自己写了构造方法,所以这里就调用我i们写过的。就输出了如图所示的内容。需要注意的是:如果没有实现如何的构造方法,编译器会帮我们默认生成有个不带参数的构造方法。也就是说,一个类,至少会有一个构造方法。

除了上面这种构造方法,我们还能写带有参数的构造方法。例如:

class Person {
    private String name;
    public Person(String name1) {
        name = name1;
        System.out.println("Person(String) 带一个参数的构造方法");
    }
}
public static void main(String[] args) {
    Person person = new Person("Lockey");
}

在这里插入图片描述

如图:在类初始化的时候,传入参数 “Lockey” 在类实例化的时候就是调用有参数的构造方法。既然能传参数,那是否可以传多个参数呢?答案是可以的。例如:

class Person {
    private String name;
    private int age;
    public Person(String name1, int age1) {
        name = name1;
        age = age1;
        System.out.println("Person(String, int) 带两个参数的构造方法");
    }
}
public static void main(String[] args) {
    Person person = new Person("Lockey",10);
}

在这里插入图片描述

如图,调用的就是传了两个参数的构造方法。通过观察上面的例子,我们可以发现:构造方法也是支持重载的。

this 关键字

在类当中,this 表示当前对象的引用(不是当前对象),可以通过 this 来访问类当中的字段和方法。用 this 的话,会降低出现 bug 的概率,并且增加代码的可读性。例如使用 getter 和 setter 的时候,就可以用 this ,能多用 this 就多用 this 。

class Person {
    private String name;
    private int age;

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

匿名对象

匿名对象就是没有名字的对象。

没有引用的对象称为匿名对象.
匿名对象只能在创建对象时使用.
如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象.

代码示例:

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void print() {
        System.out.println("名字是:"+name+" 年龄:"+age);
    }
}
public static void main(String[] args) {
    new Person("Lockey",10).print();
}

在这里插入图片描述

匿名对象的缺点就是只能调用一次。

到此这篇关于Java 类与对象重难点详解的文章就介绍到这了,更多相关Java 类与对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot整合JPA配置多数据源流程详解

    Springboot整合JPA配置多数据源流程详解

    这篇文章主要介绍了Springboot整合JPA配置多数据源,JPA可以通过实体类生成数据库的表,同时自带很多增删改查方法,大部分sql语句不需要我们自己写,配置完成后直接调用方法即可,很方便
    2022-11-11
  • Java使用Armitage进行渗透测试的方法

    Java使用Armitage进行渗透测试的方法

    在网络安全领域,渗透测试是一种重要的安全评估手段,它通过模拟恶意黑客的行为来检测目标系统是否存在安全漏洞,Armitage是一个基于Java的图形化渗透测试工具,本文将介绍如何使用Armitage进行渗透测试,需要的朋友可以参考下
    2024-12-12
  • java中使用POI生成Excel并导出过程

    java中使用POI生成Excel并导出过程

    这篇文章主要介绍了java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • JMeter配置元件详解

    JMeter配置元件详解

    JMeter提供了丰富的配置元件,常用的包括参数化配置元件、HTTP请求默认值、HTTP信息头管理器、计数器等,本文就详细的介绍一下这些元件的使用,感兴趣的可以了解一下
    2021-12-12
  • Spring Boot 多数据源处理事务的思路详解

    Spring Boot 多数据源处理事务的思路详解

    这篇文章主要介绍了Spring Boot 多数据源如何处理事务,本文单纯就是技术探讨,要从实际应用中来说的话,我并不建议这样去玩分布式事务、也不建议这样去玩多数据源,毕竟分布式事务主要还是用在微服务场景下,对Spring Boot 多数据源事务相关知识感兴趣的朋友参考下本文
    2022-06-06
  • Java实现顺序表的操作

    Java实现顺序表的操作

    这篇文章主要为大家详细介绍了Java实现顺序表的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • spring boot启动时加载外部配置文件的方法

    spring boot启动时加载外部配置文件的方法

    这篇文章主要给大家介绍了关于spring boot启动时加载外部配置文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • Java8 LocalDateTime时间日期类使用实例详解

    Java8 LocalDateTime时间日期类使用实例详解

    本文从 LocalDateTime 类的创建、转换、格式化与解析、计算与比较以及其他操作几个方面详细介绍了 LocalDateTime 类在 Java 8 中的使用,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • 深入了解Java虚拟机栈以及内存模型

    深入了解Java虚拟机栈以及内存模型

    这篇文章主要介绍了深入了解Java虚拟机栈以及内存模型,文中有非常详细的代码示例,对正在学习java的小伙伴们有很大的帮助,需要的朋友可以参考下
    2021-04-04
  • java使用Nagao算法实现新词发现、热门词的挖掘

    java使用Nagao算法实现新词发现、热门词的挖掘

    这篇文章主要介绍了java使用Nagao算法实现新词发现、热门词的挖掘的思路和详细代码,需要的朋友可以参考下
    2015-07-07

最新评论