【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
【Java编程教程】详解Java 中的对象和类的更多相关文章
- selenium 使用教程详解-java版本
第一章 Selenium 概述 1.1.Selenium 发展史 Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗 ...
- java提高篇-----详解java的四舍五入与保留位
转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...
- Java 基础之详解 Java 反射机制
一.什么是 Java 的反射机制? 反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...
- Java 基础之详解 Java IO
Java IO基本概念 Java IO:即Java输入/输出系统,区分Java的输入和输出:把自己当成程序, 当你从外边读数据到自己这里就用输入(InputStream/Reader), 向外边写数据 ...
- 详解C#中System.IO.File类和System.IO.FileInfo类的用法
System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法. (1) 文件打开 ...
- 详解Django中Request对象的相关用法
原文链接:http://www.jb51.net/article/69624.htm 1.从Request对象中获取数据 我们在第三章讲述View的函数时已经介绍过HttpRequest对象了,但当时 ...
- JAVA命令参数详解
JAVA命令参数详解 JAVA命令详解 结构 说明 Java 和 OldJava JIT 选项 另请参阅 结构 java [ options ] class [ argument ... ] java ...
- java封装基础详解
java封装基础详解 java的封装性即是信息隐藏,把对象的属性和行为结合成一个相同的独立单体,并尽可能地隐藏对象的内部细节. 封装的特性是对属性来讲的. 封装的目标就是要实现软件部件的"高 ...
- java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock
原文:java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock 锁 锁是用来控制多个线程访问共享资源的方式,java中可以使用synch ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
随机推荐
- 力扣1098(MySQL)-小众书籍(中等)
题目: 书籍表 Books: book_id 是这个表的主键 订单表 Orders: order_id 是这个表的主键.book_id 是 Books 表的外键. 问题你需要写一段 SQL 命令,筛选 ...
- 力扣177(MySQL)-第N高的薪水(中等)
题目: 表: Employee 编写一个SQL查询来报告 Employee 表中第 n 高的工资.如果没有第 n 个最高工资,查询应该报告为 null . 查询结果格式如下所示 示例1: 示例2: 解 ...
- 高效使用Java构建工具|Maven篇|云效工程师指北
简介:高效使用Java构建工具|Maven篇.众所周知,当前最主流的Java构建工具为Maven/Gradle/Bazel,针对每一个工具,我将分别从日常工作中常见的场景问题切入,例如依赖管理.构建 ...
- 阿里的 RocketMQ 如何让双十一峰值之下 0 故障?
简介: 2020 年双十一交易峰值达到 58.3 W 笔/秒,消息中间件 RocketMQ 继续数年 0 故障丝般顺滑地完美支持了整个集团大促的各类业务平稳. 作者 | 愈安来源 | 阿里巴巴云原生公 ...
- 自己动手写符合自己业务需求的eslint规则
简介:eslint是构建在AST Parser基础上的规则扫描器,缺省情况下使用espree作为AST解析器.rules写好对于AST事件的回调,linter处理源代码之后会根据相应的事件来回调ru ...
- 学术顶会再突破!计算平台MaxCompute论文入选国际顶会VLDB 2021
简介: VLDB 2021上,阿里云计算平台MaxCompute参与的论文入选,核心分布式调度执行引擎Fangorn.基于TVR Cost模型的通用增量计算优化器框架Tempura等分别被Indu ...
- [Pholcus] Go项目 Pholcus 编写静态规则文件, 0 到 1
1. 初始化项目包,go mod init [module-path] 比如:go mod init github.com/abc/efg 2. 新建一个目录放置我们编写的规则 go 文件. 3. m ...
- Oracle、达梦:获取两个表中差异的数据:minus(减法)
Oracle.达梦:获取两个表中差异的数据:minus(减法) mysql没有.需要用别的方式替换 表结构必须一致,数据也必须一致才能减去 真实意思:T_1中的数据减去T_2中的数据.返回还多余的数据 ...
- Dijkstra迪杰斯特拉求最短路和最短路的条数和各个点权值的最大值
作为一个城市的紧急救援队队长,你会得到一张你所在国家的特殊地图. 该地图显示了由一些道路连接的几个分散的城市. 地图上标出了每个城市的救援队伍数量以及任意两个城市之间每条道路的长度. 当其他城市接到紧 ...
- 源码安装expect
1. yum安装expect 如果有外网,可以yum安装,如下: yum install expect 2.源码安装expect 下载tcl源码包 cd /tmp &&wget htt ...