Java开发——7.类和对象

简介: 类是对象的抽象,对象是类的具体实现。

概述:

类:类是一组相关属性和行为的集合;类就是现实生活的一个事物,事物由属性和行为组成。

对象:对象是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。

类和对象的关系:类是对象的抽象,对象是类的具体实现;类是抽象的,不占内存;对象是具体的,占用存储空间。




类:

类声明的脑图分析:

image.png

属性:属性分为成员变量和局部变量;成员变量是在类中,方法之外定义的变量;局部变量是在方法中声明的变量。

以下字段为成员变量:String name;int age;String sex;以下字段为局部变量:String ID = "202200205";

publicclassStudent {
// 1.定义学生的属性Stringname;
intage;
Stringsex;
// 2.定义学生能实现的方法publicvoidlearning(){
StringID="202200205";
System.out.println(name+",可以好好学习!");
    }
}

常量:用final关键字修饰的变量就是常量!常量一旦赋值是不能改变的,常量通常用全大写定义。

注:如果声明一个变量为常量,就必须在声明结束后直接赋值,否则编译无法通过。



//常量可以自定义但是有些类中,会有自己的常量
final String ID = "202200205";

以Math类,举例查看其中自定义好的常量;

注:Java类中已经定义好的常量一般都是具有特殊含义;所以定义为常量供用户选择;此处的常量由 static final 修饰,则此常量为终极常量,被static定义的常量/方法可以直接由 类名.常量名 调用。

image.png


publicstaticvoidmain(String[] args) {
System.out.println(Math.PI); //方法名.常量名,即可实现输出常量值}


方法/行为:就是在类中定义的一系列操作;

如下在 Student 学生类中定义了 学习和吃饭 的方法,在类中可以定义多个不同名方法;注意:方法名不能和;类名相同,如果方法名和类名相同则为构造方法。


publicclassStudent {
// 1.定义学生的属性Stringname;
intage;
Stringsex;
// 2.定义学生能实现的方法publicvoidlearning(){
StringID="202200205";
System.out.println(name+",可以好好学习!");
    }
publicvoideat(){
System.out.println(name+"吃饭!");
    }
}

构造方法:分为无参构造方法和有参构造方法。

每次新建一个类,系统都会自动给该类生成一个无参的构造方法,供用户调用;但是有参方法需要手动创建;

注:如果自定义了一个有参构造方法的时候,系统则不会给该类再默认生成一个无参的构造方法了,需要手动创建一个无参构造方法。

构造方法的重写

重写:前提,有继承关系。子类继承父类中方法,就是重写;

重写,子类重写父类中的方法,要求子类重写父类的方法的方法名和参数列表必须和父类保持一致。


//自定义一个学生类publicclassStudent {
// 1.定义学生的属性Stringname;
intage;
Stringsex;
// 2.定义学生能实现的方法publicvoidlearning(){
StringID="202200205";
System.out.println(name+",可以好好学习!");
    }
publicvoideat(){
System.out.println(name+"吃饭!");
    }
// 3.无参构造方法publicStudent(){
System.out.println("我是无参构造方法!");
    }
// 4.有参构造方法publicStudent(Stringname,intage){
this.name=name; //此处是直接把传递进来的形参赋值给成员变量this.age=age;
    }
}


//自定义一个学生类的实现类publicclassStudentAchieve {
publicstaticvoidmain(String[] args) {
// 1.使用无参构造方法实例化对象Studentstu1=newStudent();//此处默认调用无参构造方法 stu1.name="张三";
stu1.age=66;
stu1.sex="男";
//2.调用Student类中的方法stu1.learning();
stu1.eat();
// 3.使用有参构造方法实例化对象Studentstu2=newStudent("李四",66);
//4.调用Student类中的方法stu2.learning();
stu2.eat();
    }        
}




对象:

实例对象的脑图分析:

image.png

对象是类的实例化!

注:一个类可以new多个对象,但是每个对象的对象名不同!

上一期讲了Java中的内存分配,所以对于成员变量和局部变量的存储位置,相信大家都有了更加深刻的了解,只要是new出来的对象都存放在堆内存之中。

相关文章
|
2天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
16 3
|
2天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
1天前
|
消息中间件 Java RocketMQ
MQ产品使用合集之在同一个 Java 进程内建立三个消费对象并设置三个消费者组订阅同一主题和标签的情况下,是否会发生其中一个消费者组无法接收到消息的现象
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
10 1
|
1天前
|
Java 数据安全/隐私保护 Spring
Java 中 Spring Boot 框架下的 Email 开发
Java 中 Spring Boot 框架下的 Email 开发
18 2
|
2天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
2天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
21 3
|
2天前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
11 4
|
2天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
23 4
|
2天前
|
安全 Java 调度
Java一分钟:多线程编程初步:Thread类与Runnable接口
【5月更文挑战第11天】本文介绍了Java中创建线程的两种方式:继承Thread类和实现Runnable接口,并讨论了多线程编程中的常见问题,如资源浪费、线程安全、死锁和优先级问题,提出了解决策略。示例展示了线程通信的生产者-消费者模型,强调理解和掌握线程操作对编写高效并发程序的重要性。
45 3
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态