【Java编程教程】详解Java 中的对象和类
在本页中,我们将了解 Java 对象和类。在面向对象的编程技术中,我们使用对象和类来设计程序。
Java中的对象既是物理实体又是逻辑实体,而Java中的类只是逻辑实体。
什么是Java中的对象
具有状态和行为的实体称为对象,例如椅子、自行车、记号笔、笔、桌子、汽车等。它可以是物理的或逻辑的(有形的和无形的)。无形对象的例子是银行系统。
一个对象具有三个特征:
- 属性:表示对象的数据(值)。
- 方法:表示一个对象的方法(功能),如存款、取款等。
- 身份:对象身份通常通过唯一 ID 实现。ID 的值对外部用户不可见。但是,JVM 在内部使用它来唯一地标识每个对象。
例如,Pen 是一个对象。它的名字叫雷诺兹;颜色为白色,称为它的状态。它是用来写的,所以写就是它的行为。
对象是类的实例。类是创建对象的模板或蓝图。因此,对象是类的实例(结果)。
对象定义:
- 对象是现实世界中的实体。
- 对象是运行时实体。
- 对象是具有状态和行为的实体。
- 该对象是一个类的实例。
Java中的类是什么
类是一组具有共同属性的对象。它是创建对象的模板或蓝图。它是一个逻辑实体。它不可能是物理的。
Java 中的类可以包含:
- 字段
- 方法
- 构造器
- 嵌套类和接口
声明类的语法:
class <class_name>{ field; method; }
Java 中的实例变量
在类内部但在方法外部创建的变量称为实例变量。实例变量在编译时不获取内存。它在创建对象或实例时在运行时获取内存。这就是为什么它被称为实例变量。
Java 中的方法
在 Java 中,方法就像一个函数,用于公开对象的行为。
方法优势
- 代码重用性
- 代码优化
Java中的新关键字
new 关键字用于在运行时分配内存。所有对象都在堆内存区域中获得内存。
对象和类示例:类中的 main
在这个例子中,我们创建了一个 Student 类,它有两个数据成员 id 和 name。我们正在通过 new 关键字创建 Student 类的对象并打印对象的值。
在这里,我们在类中创建一个 main() 方法。
文件:Student.java
//Java程序来说明如何定义一个类和字段 //定义一个学生类 class Student{ //定义字段 int id;//字段或数据成员或实例变量 //在Student类中创建main方法 public static void main(String args[]){ //创建对象或实例 Student s1=new Student();//创建学生对象 //打印对象的值 System.out.println(s1.id);//通过引用变量访问成员 System.out.println(s1.name); } }
输出:
0
null
对象和类示例:类外的main
在实时开发中,我们创建类并从另一个类中使用它。这是一种比以前更好的方法。
让我们看一个简单的例子,我们在另一个类中有 main() 方法。
我们可以在不同的 Java 文件或单个 Java 文件中有多个类。如果在单个 Java 源文件中定义多个类,最好使用具有 main() 方法的类名来保存文件名。
文件:TestStudent1.java
//Java 程序来演示在其中有 main 方法 //另一个类 //创建学生类 class Student{ int id; String name; } //创建另一个包含主要方法的类TestStudent1 class TestStudent1{ public static void main(String args[]){ Student s1=new Student(); System.out.println(s1.id); System.out.println(s1.name); } }
输出:
0
null
3种初始化对象的方法
在 Java 中有 3 种初始化对象的方法。
- 通过引用变量
- 按方法
- 通过构造函数
1)对象和类示例:通过引用初始化
初始化对象意味着将数据存储到对象中。让我们看一个简单的例子,我们将通过引用变量初始化对象。
文件:TestStudent2.java
class Student{ int id; String name; } class TestStudent2{ public static void main(String args[]){ Student s1=new Student(); s1.id=101; s1.name="小明"; System.out.println(s1.id+" "+s1.name);//用空格打印成员 } }
输出:
101 小明
我们还可以创建多个对象,并通过引用变量将信息存储在其中。
文件:TestStudent3.java
class Student{ int id; String name; } class TestStudent3{ public static void main(String args[]){ //创建对象 Student s1=new Student(); Student s2=new Student(); //初始化对象 s1.id=101; s1.name="小明"; s2.id=102; s2.name="小华"; //Printing data System.out.println(s1.id+" "+s1.name); System.out.println(s2.id+" "+s2.name); } }
输出:
101 小明
102 小华
2)对象和类示例:通过方法初始化
在此示例中,我们创建了 Student 类的两个对象,并通过调用 insertRecord 方法将值初始化为这些对象。在这里,我们通过调用 displayInformation() 方法来显示对象的状态(数据)。
文件:TestStudent4.java
class Student{ int rollno; String name; void insertRecord(int r, String n){ rollno=r; name=n; } void displayInformation(){System.out.println(rollno+" "+name);} } class TestStudent4{ public static void main(String args[]){ Student s1=new Student(); Student s2=new Student(); s1.insertRecord(111,"小可"); s2.insertRecord(222,"小艾"); s1.displayInformation(); s2.displayInformation(); } }
输出:
111 小可
222 小艾
上图可以看到,object获取的是堆内存区的内存。引用变量是指分配在堆内存区的对象。这里,s1 和 s2 都是引用变量,引用内存中分配的对象。
3) 对象和类示例:通过构造函数初始化
稍后我们将学习 Java 中的构造函数。
对象和类示例:员工
让我们看一个维护员工记录的例子。
文件:TestEmployee.java
class Employee{ int id; String name; float salary; void insert(int i, String n, float s) { id=i; name=n; salary=s; } void display(){System.out.println(id+" "+name+" "+salary);} } public class TestEmployee { public static void main(String[] args) { Employee e1=new Employee(); Employee e2=new Employee(); Employee e3=new Employee(); e1.insert(101,"A",45000); e2.insert(102,"B",25000); e3.insert(103,"C",55000); e1.display(); e2.display(); e3.display(); } }
输出:
101 A 45000.0
102 B 25000.0
103 C 55000.0
对象和类示例:矩形
给出了另一个维护 Rectangle 类记录的例子。
文件:TestRectangle1.java
class Rectangle{ int length; int width; void insert(int l, int w){ length=l; width=w; } void calculateArea(){System.out.println(length*width);} } class TestRectangle1{ public static void main(String args[]){ Rectangle r1=new Rectangle(); Rectangle r2=new Rectangle(); r1.insert(11,5); r2.insert(3,15); r1.calculateArea(); r2.calculateArea(); } }
输出:
55
45
在 Java 中创建对象有哪些不同的方法?
java中创建对象的方法有很多种。他们是:
- 按新关键字
- 通过 newInstance() 方法
- 通过 clone() 方法
- 通过反序列化
- 通过工厂方法等
稍后我们将学习这些创建对象的方法。
匿名对象
匿名只是意味着无名。没有引用的对象称为匿名对象。它只能在创建对象时使用。
如果您只需要使用一个对象一次,那么匿名对象是一个很好的方法。例如:
new Calculation();//匿名对象
通过引用调用方法:
Calculation c=new Calculation(); c.fact(5)
通过匿名对象调用方法
new Calculation().fact(5);
让我们看看 Java 中匿名对象的完整示例。
class Calculation{ void fact(int n){ int fact=1; for(int i=1;i<=n;i++){ fact=fact*i; } System.out.println("阶乘为 "+fact); } public static void main(String args[]){ new Calculation().fact(5);//使用匿名对象调用方法 } }
输出:
阶乘为 120
仅按一种类型创建多个对象
我们只能通过一种类型创建多个对象,就像我们在基元的情况下所做的那样。
原始变量的初始化:
int a=10, b=20;
引用变量的初始化:
1、矩形 r1= new Rectangle(), r2= new Rectangle(); //创建两个对象
Rectangle r1=new Rectangle(), r2=new Rectangle();//创建两个对象
让我们看看这个例子:
//Java程序来说明其中Rectangle类的使用 //有长度和宽度数据成员 class Rectangle{ int length; int width; void insert(int l,int w){ length=l; width=w; } void calculateArea(){System.out.println(length*width);} } class TestRectangle2{ public static void main(String args[]){ Rectangle r1=new Rectangle(),r2=new Rectangle();//创建两个对象 r1.insert(11,5); r2.insert(3,15); r1.calculateArea(); r2.calculateArea(); } }
输出:
55
45
真实世界的例子:账户
文件:TestAccount.java
//用于演示银行系统工作的Java程序 //我们从我们的账户存入和提取金额的地方。 //创建一个具有 deposit() 和 withdraw() 方法的 Account 类 class Account{ int acc_no; String name; float amount; //初始化对象的方法 void insert(int a,String n,float amt){ acc_no=a; name=n; amount=amt; } //存款方法 void deposit(float amt){ amount=amount+amt; System.out.println(amt+" 存入"); } //撤回方法 void withdraw(float amt){ if(amount<amt){ System.out.println("余额不足"); }else{ amount=amount-amt; System.out.println(amt+" 撤回"); } } //查询账户余额的方法 void checkBalance(){System.out.println("余额为: "+amount);} //显示对象值的方法 void display(){System.out.println(acc_no+" "+name+" "+amount);} } //创建一个测试类来存取金额 class TestAccount{ public static void main(String[] args){ Account a1=new Account(); a1.insert(832345,"小安",1000); a1.display(); a1.checkBalance(); a1.deposit(40000); a1.checkBalance(); a1.withdraw(15000); a1.checkBalance(); }}
输出:
832345 小安 1000.0
余额为:1000.0
40000.0 存入
余额为:41000.0
15000.0 撤回
余额为:26000.0
本文作者:二价亚铁
本文链接:https://www.cnblogs.com/xw-01/p/17569673.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步