JavaSE-类和对象
类和对象的概念
类的定义
类是一种用户自定义的数据类型,它是创建对象的蓝图,定义了一组属性(称为“字段”)和方法(称为“函数”)。类是面向对象编程的基本构建块,它封装了数据和行为。
在 Java 中编写一个类需要遵循一定的结构和语法规则。以下是一个基本的 Java 类的结构示例以及它所包含的部分:
// 包声明,用于组织类
package com.example;
// 导入语句,用于导入其他包中的类或接口
import java.util.List;
// 类的声明,关键字 class 后跟类名
public class MyClass {
// 类的属性(成员变量)
private int id;
private String name;
// 类的构造函数
public MyClass(int id, String name) {
this.id = id;
this.name = name;
}
// 类的方法
public void displayInfo() {
System.out.println("ID: " + id + ", Name: " + name);
}
// getter 和 setter 方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 类可以包含其他方法、内部类、枚举、注解等
// 主方法(如果类是一个应用程序的入口)
public static void main(String[] args) {
// 创建 MyClass 的实例
MyClass myObject = new MyClass(1, "Example");
// 调用方法
myObject.displayInfo();
}
}
写一个类要包含以下部分(类的结构):
包声明(Package Declaration):
- 使用
package关键字声明,用于组织类和接口。
- 使用
导入语句(Import Statements):
- 使用
import关键字导入其他包中的类或接口。
- 使用
类声明(Class Declaration):
- 使用
class关键字后跟类名。
- 使用
访问修饰符(Access Modifiers):
- 如
public,protected,private等,定义类或类的成员的可见性。
- 如
类属性(Class Fields):
- 定义类的成员变量,可以是任何数据类型。
构造函数(Constructor):
- 类的构造函数用于创建类的实例。
方法(Methods):
- 类的行为通过方法实现,可以包含业务逻辑。
getter 和 setter 方法(Accessors and Mutators):
- 提供访问和更新类属性的方式。
主方法(Main Method)(如果类是应用程序的入口):
- 使用
public static void main(String[] args)作为程序的入口点。
- 使用
文档注释(Documentation Comments):
- 使用
/** ... */为类和方法提供文档注释。
- 使用
代码注释(Code Comments):
- 使用
//或/* ... */为代码添加注释,提高代码可读性。
- 使用
异常处理(Exception Handling):
- 使用
try,catch,finally,throw,throws等关键字进行异常处理。
- 使用
内部类(Inner Classes):
- 如果需要,类可以包含内部类定义。
枚举(Enums) 和 注解(Annotations):
- 类内部可以定义枚举类型和使用注解。
编写类时,应确保遵循良好的编程实践,如使用有意义的命名、保持方法的单一职责、确保代码的可读性和可维护性。
对象的创建
对象是类的实例,它是类的具体化。对象具有类定义的属性(字段)和方法(函数),并且可以访问和修改这些属性。通过“new”关键字创建对象。
成员变量(属性)
成员变量是类的属性,它们可以是静态变量(静态成员变量)或非静态变量(非静态成员变量)。
/*类的定义和对象的创建*/
// 类的定义
public class MyClass {
// 成员变量
private int myVar;
// 构造器(无参)
public MyClass() {
this.myVar = 0;
}
// 构造器(有参)
public MyClass(int var) {
this.myVar = var;
}
// 成员方法
public int getMyVar() {
return myVar;
}
public void setMyVar(int var) {
this.myVar = var;
}
}
// 对象的创建(无参)
MyClass obj1 = new MyClass();
// 对象的创建(有参)
MyClass obj2 = new MyClass(10);
静态变量:静态变量属于类,而不是特定的对象。它们在类加载时创建,而不是在创建对象时创建。静态变量可以使用类名直接访问。
非静态变量:非静态变量属于类的实例,而不是类。它们在创建对象时创建,而不是在类加载时创建。要访问非静态变量,需要创建类的实例并使用实例名访问。
// 类的定义
public class MyClass {
// 静态变量
private static int staticVar;
// 非静态变量
private int nonStaticVar; // 构造器
public MyClass(int var) {
this.nonStaticVar = var;
} // 静态方法(获取静态变量)
public static int getStaticVar() {
return staticVar;
} // 静态方法(设置静态变量)
public static void setStaticVar(int var) {
staticVar = var;
} // 非静态方法(获取非静态变量)
public int getNonStaticVar() {
return nonStaticVar;
} // 非静态方法(设置非静态变量)
public void setNonStaticVar(int var) {
this.nonStaticVar = var;
}
} // 访问静态变量
int staticVarValue = MyClass.getStaticVar(); // 访问非静态变量
MyClass obj = new MyClass(10);
int nonStaticVarValue = obj.getNonStaticVar();
成员方法(函数、方法)
成员方法是类的函数,它们可以静态方法(静态成员方法)或非静态方法(非静态成员方法)。
静态方法:静态方法属于类,而不是特定的对象。它们可以直接使用类名调用,而不需要创建类的实例。静态方法通常用于操作静态变量或执行与对象无关的操作。
非静态方法:非静态方法属于类的实例,而不是类。要调用非静态方法,需要创建类的实例并使用实例名调用。非静态方法通常用于操作对象的属性和执行与对象相关的操作。
// 类的定义
public class MyClass {
// 静态方法
public static void staticMethod() {
System.out.println("This is a static method.");
} // 非静态方法
public void nonStaticMethod() {
System.out.println("This is a non-static method.");
} } // 调用静态方法
MyClass.staticMethod(); // 创建对象
MyClass obj = new MyClass(); // 调用非静态方法
obj.nonStaticMethod();
对象的实例化
构造器
构造器是一种特殊的方法,用于在创建对象时初始化对象。构造器的名称与类名相同,没有返回类型,并且通常包含对成员变量的初始化。
构造器的使用
使用“new”关键字创建对象,并在括号中传递参数(如果有)。例如:
MyClass obj = new MyClass(param1, param2);
构造器重载
构造器重载是指在同一个类中定义多个构造器,每个构造器具有不同的参数列表。这允许创建具有不同初始状态的对象。
构造器链(Constructor Chaining)
- 构造器可以通过
this()调用同一类中的另一个构造器,这称为构造器链。 this()调用必须是构造器中的第一条语句。
私有构造器
构造器可以是私有的(
private),这意味着它不能被外部类直接访问。私有构造器常用于单例模式(Singleton Pattern)或枚举类型(Enums)
示例
public class Person {
private String name;
private int age; // 无参构造器
public Person() {
this.name = "Unknown";
this.age = 0;
} // 带参数的构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
} // 构造器链
public Person(String name) {
this(name, 0); // 调用带两个参数的构造器
}
}
- 构造器用于初始化对象的状态。
- 构造器名称必须与类名相同,并且没有返回类型。
- 可以通过构造器重载提供多种对象初始化方式。
- 默认情况下,如果没有显式定义构造器,Java会提供一个默认无参构造器。
- 构造器可以通过
this()实现链式调用。 - 构造器可以是私有的,用于控制对象的创建
匿名对象
匿名对象是不具有名称的对象,它们通常用于一次性使用。例如,当传递一个对象作为参数,但不需要该对象在其他地方使用时,可以使用匿名对象。例如:
someFunction(new MyClass(param1, param2));
如何识别匿名对象
要识别一个对象是否是匿名对象,可以查看代码中是否有类似以下的语法结构:
new ClassName().methodName(); //第一种方式
new ClassName().fieldName; //第二种方式
这里,ClassName是类名,methodName是方法名,fieldName是字段名。这种语法表示创建了一个ClassName的实例,并且立即调用了其上的方法或访问了其上的字段,而没有将这个实例赋给任何变量。
示例
假设有一个Person类,其中有一个方法sayHello:
public class Person {
public void sayHello() {
System.out.println("Hello, I am an anonymous object.");
}
}
以下是如何使用匿名对象调用sayHello方法的示例:
new Person().sayHello(); // 创建一个Person的匿名对象,并调用其sayHello方法
注意
- 匿名对象因为没有引用名称,所以只能使用一次。一旦完成了对其方法或属性的访问,就无法再次使用这个对象。
- 匿名对象适用于轻量级操作,尤其是当对象的创建成本不高,并且确信不需要多次复用这个对象时。
总结
- 匿名对象是没有被显式赋给变量的对象。
- 可以通过检查代码中是否有
new ClassName().methodName()或new ClassName().fieldName的语法结构来识别匿名对象。 - 匿名对象特别适合于一次性使用场景。
Java中对象的销毁
在Java中,当一个对象不再被引用时,它将被垃圾回收器(GC)销毁。垃圾回收器会自动检测不再使用的对象,并释放其内存。
总结
类是一种用户自定义的数据类型,用于创建具有属性和行为的对象。对象是类的实例,它们具有类定义的属性和方法。成员变量是类的属性,可以是静态变量或非静态变量。成员方法是类的函数,可以是静态方法或非静态方法。
对象通过构造器进行实例化,构造器用于初始化对象的属性。可以对构造器进行重载以创建具有不同初始状态的对象。在Java中,当一个对象不再被引用时,它将被垃圾回收器销毁。
匿名对象是不具有名称的对象,它们通常用于一次性使用。
JavaSE-类和对象的更多相关文章
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- JavaSE基础知识(5)—面向对象(5.1类和对象概念、创建及内存分配)
一.类和对象的相关概念 1.面向对象和面向过程的理解 面向对象和面向过程都属于解决问题的思考方式.面向过程:以执行者的角度思考问题,侧重于“怎么做”,比较适合解决小型项目面向对象:以指挥者的角度思考问 ...
- [javase学习笔记]-6.2 类与对象的关系
这一节我们来看一下类与对象之间的关系. 我们学习java语言,目的就是用java语言对现实生活中的事物进行描写叙述.那么我们如何来描写叙述呢.这就引出了类,我们在实际实现时,是通过类的形式来体现的. ...
- 类与对象 - Java学习(二)
弄清楚类与对象的本质与基本特征,是进一步学习面向对象编程语言的基本要求.面向对象程序设计与面向过程程序设计在思维上存在着很大差别,改变一种思维方式并不是一件容易的事情. 一.面向对象程序设计 程序由对 ...
- java 类与对象基础整理
之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习! 一.类and对象的基础 类似于类的生命啊,类与对象的关系 ...
- 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...
- Java编程里的类和对象
像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...
- Python - 类与对象的方法
类与对象的方法
- C++基础知识(5)---类和对象
终于把C++中的基础在前面的几篇博客中总结完了,可能还有一些语法还没有总结到,没关系,以后用到了再查资料就好.类是C++中的一个非常重要的概念,这是区别你使用的C++到底是面向过程还是面向对象的一个重 ...
- 简述JavaScript对象、数组对象与类数组对象
问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...
随机推荐
- WindowsPE文件格式入门05.PE加载器LoadPE
https://bpsend.net/thread-316-1-1.html LoadPE - pe 加载器 壳的前身 如果想访问一个程序运行起来的内存,一种方法就是跨进程读写内存,但是跨进程读写内存 ...
- 8086汇编(16位汇编)学习笔记05.asm基础语法和串操作
https://bpsend.net/thread-121-1-2.html asm基础语法 1. 环境配置 xp环境配置 1.拷贝masm615到指定目录 2.将masm615目录添加进环境变量 3 ...
- React Native开发鸿蒙Next---图片浏览与保存的问题交流
React Native开发鸿蒙Next---图片浏览与保存的问题交流 之前介绍过利用鸿蒙三方RN组件@react-native-camera-roll/camera-roll保存图片到相册. Rea ...
- 一个开源免费、功能丰富的 WPF 自定义控件资源库
前言 今天大姚给大家分享一个开源免费(MIT license).功能丰富的 WPF 自定义控件资源库:WPF-ControlBase. WPF 介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有 ...
- MySQL查询优化的步骤
本文由 ChatMoney团队出品 MySQL查询优化是提高数据库性能的关键步骤之一.通过优化查询,可以减少数据库的负载,提高查询速度,从而提高整个应用程序的性能. 选择合适的索引 索引是数据库中用于 ...
- firefox修改headers 伪装为手机版
世界在脚下vip 2017.12.23 16:22:32 字数 184 阅读 694 1.在浏览器地址栏输入"about:config" 2.新建字符串"general. ...
- Spring AI 对话记忆大揭秘:服务器重启,聊天记录不再丢失!
还在为 Spring AI 应用重启后对话上下文丢失而烦恼吗?本文将带你深入 Spring AI 的对话记忆机制,并手把手教你实现一个基于文件的持久化方案,让你的 AI 应用拥有 "过目不忘 ...
- pm2启动nextjs项目
安装pm2 npm install -g pm2 yarn global add pm2 pm2启动项目 npm run xx,就可以写成:pm2 start npm -- run xx pm2 st ...
- 中大ACM个人赛 ABC题题解
摸完签到题就跑了 A - Maximum Subrectangle 题意:有个C矩阵,C[i][j] = a[i]b[j], 问你在\(\displaystyle\sum_{i=x1}^{x2}\) ...
- stdout stdin stderr
#include<stdio.h>int main(){ fprintf(stdout,"hello"); int a; fscanf(stdin,"%d&q ...