Java创建对象详解

对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。Java 对象的生命周期包括创建、使用和清除, Java 语言中创建对象分显式创建与隐含创建两种情况。

显式创建对象

对象的显式创建方式有 4 种。
1. 使用 new 关键字创建对象
这是常用的创建对象的方法,语法格式如下:

类名 对象名 = new 类名()

2. 调用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法
在 Java 中,可以使用 java.lang.Class 或者 java.lang.reflect.Constuctor 类的 newlnstance() 实例方法来创建对象,代码格式如下:

java.lang.Class Class 类对象名称 = java.lang.Class.forName(要实例化的类全称);
类名 对象名 = (类名)Class类对象名称.newInstance();

调用 java.lang.Class 类中的 forName() 方法时,需要将要实例化的类的全称(比如 com.mxl.package.Student)作为参数传递过去,然后再调用 java.lang.Class 类对象的 newInstance() 方法创建对象。
3. 调用对象的 clone() 方法
该方法不常用,使用该方法创建对象时,要实例化的类必须继承 java.lang.Cloneable 接口。 调用对象的 clone() 方法创建对象的语法格式如下:
类名对象名 = (类名)已创建好的类对象名.clone();

4. 调用 java.io.ObjectlnputStream 对象的 readObject() 方法

示例常用的前三种对象创建方法。示例代码如下:

public class Student implements Cloneable {   // 实现 Cloneable 接口private String Name;    // 学生名字private int age;    // 学生年龄public Student(String name,int age) {    // 构造方法this.Name = name;this.age = age;}public Student() {this.Name = "name";this.age = 0;}public String toString() {return"学生名字:"+Name+",年龄:"+age;}public static void main(String[] args)throws Exception {System.out.println("---------使用 new 关键字创建对象---------");// 使用new关键字创建对象Student student1 = new Student("小刘",22);System.out.println(student1);System.out.println("-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------");// 调用 java.lang.Class 的 newInstance() 方法创建对象Class c1 = Class.forName("Student");Student student2 = (Student)c1.newInstance();System.out.println(student2);System.out.println("-------------------调用对象的 clone() 方法创建对象----------");// 调用对象的 clone() 方法创建对象Student student3 = (Student)student2.clone();System.out.println(student3);}
}

解说

	使用 new 关键字或 Class 对象的 newInstance() 方法创建对象时,都会调用类的构造方法。使用 Class 类的 newInstance() 方法创建对象时,会调用类的默认构造方法,即无参构造方法。使用 Object 类的 clone() 方法创建对象时,不会调用类的构造方法,它会创建一个复制的对象,这个对象和原来的对象具有不同的内存地址,但它们的属性值相同。如果类没有实现 Cloneable 接口,则 clone。方法会抛出 java.lang.CloneNotSupportedException 异常,所以应该让类实现 Cloneable 接口。

程序执行结果如下:

---------使用 new 关键字创建对象---------
学生名字:小刘,年龄:22
-----------调用 java.lang.Class 的 newInstance() 方法创建对象-----------
学生名字:name,年龄:0
-------------------调用对象的done()方法创建对象----------
学生名字:name,年龄:0

隐含创建对象

除了显式创建对象以外,在 Java 程序中还可以隐含地创建对象,例如下面几种情况。

1 . String strName = “strValue”,其中的“strValue”就是一个 String 对象,由 Java 虚拟机隐含地创建。

2 . 字符串的“+”运算符运算的结果为一个新的 String 对象,示例如下:

String str1 = "Hello";
String str2 = "Java";
String str3 = str1+str2;    // str3引用一个新的String对象

3 . 当 Java 虚拟机加载一个类时,会隐含地创建描述这个类的 Class 实例。

提示:类的加载是指把类的 .class 文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。

无论釆用哪种方式创建对象,Java 虚拟机在创建一个对象时都包含以下步骤:

	给对象分配内存。将对象的实例变量自动初始化为其变量类型的默认值。初始化对象,给实例变量赋予正确的初始值。

注意:每个对象都是相互独立的,在内存中占有独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成了垃圾,由 Java 虚拟机自带的垃圾回收机制处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python matplotlib模块教程_Python中的Matplotlib模块入门教程

1 关于 Matplotlib 模块Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块。它利用了 Python 下的数值计算模块 Numeric 及 Numarray,克隆了许多 Matlab 中的函数, 用以帮助用户轻松地获得高质量的二维图形。Matplot…

人脸离线识别模块_人脸消费机离线刷脸如何实现?

随着越来越多刷卡刷脸一卡通的设备出现。大家在享受一卡通的便利的同时。也在考虑人脸消费机的基本功能和安全属性,人脸消费机,是指人脸在消费访客管理方面的相关。在人脸刷脸进行消费的时候是一下几个阶段1.人脸特征提取首先得先让人脸消费机看到你的脸…

Java匿名对象

创建对象的格式如下: 类名称 对象名 new 类名称();每次 new 都相当于开辟了一个新的对象,并开辟了一个新的物理内存空间。如果一个对象只需要使用唯一的一次,就可以使用匿名对象,匿名对象还可以作为实际参数传递。 匿名对象就是…

mysql中的钱null_MySQL数据库中null的知识点总结

在mysql数据库中,null是一个经常出现的情况,关于mysql中的null,有哪些注意事项呢?下面简单总结归纳下,后续会不断补充。1. is null首先判断数据库中某一列的值是否为null,不能用等于来判断,必须…

Java访问对象的属性和行为

每个对象都有自己的属性和行为,这些属性和行为在类中体现为成员变量和成员方法,其中成员变量对应对象的属性,成员方法对应对象的行为。 在 Java 中,要引用对象的属性和行为,需要使用点(.)操作符…

junit版本_Junit-jupiter-api 和 junit-jupiter-engine 的区别是什么

我们都知道 JUnit 是用于进行单元测试的。但是 Junit 5 和 Junit 4 的区别比较大。 很多时候你可能会遇到 Junit 引擎配置错误导致测试无法进行。junit-jupiter-api JUnit 5 Jupiter API 的测试,你需要使用这个 API 来写测试和进行扩展。junit-jupiter-engine JUnit…

Java对象的销毁

对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。 Java 语言的内存自动回收称为垃圾…

mysql数据库基础简介_MySql数据库基础之数据库简介及安装

MySql数据库简介:众所周知,MySql数据库是一款开源的关系型数据库,在Web应用方面,MySql是最好的、最流行的RDBMS(Relational Database Management System,关系型数据库管理系统)应用软件。MySql的4大特点:1.MySql是开源…

Java用户修改密码

每一个应用系统都离不开用户模块。用户模块除了提供登录之外,还允许用户查看自己的信息和进行修改。本实例将创建一个用户类,然后再创建一个测试类调用用户类,实现修改密码的功能。 本实例的用户类非常简单,仅包含用户名和密码两…

python视频提取音频_python脚本实现mp4中的音频提取并保存在原目录

一段把mp4中的音频提取为mp3并保存在原目录的python脚本需要提前安装好ffmpeg 转换为单线程,耗时较长#!/usr/bin/env python3# -*- coding: utf-8 -*-# Time : 2020/2/26 17:36# Author : CuiFeiran# FileName : tool.py# Software : PyCharm# email :cui2025126.co…

mysql数据库自动化脚本备份_mysql 自动化脚本备份

#!/bin/sh### 备份工具:## percona-xtrabackup-2.2.6#### 备份策略:## (1)、每天凌晨04:20点进行全量备份一次;## (2)、每隔1小时增量备份一次;###PATH/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin## …

Java访问控制修饰符详解

在 Java 语言中提供了多个作用域修饰符,其中常用的有 public、private、protected、final、abstract、static、transient 和 volatile,这些修饰符有类修饰符、变量修饰符和方法修饰符。 在实际生活中,如果要获取某件物品,与其直接…

为资产分类定义折旧范围_RFID固定资产管理系统方案

项目介绍随着经济的不断发展,企业的规模日益壮大,固定资产管理作为企业资产管理最要的一部分,一直是企业关注的难题。由于固定资产具有价值高,使用周期长、使用地点分散的特点、相关责任人员多,在实际工作中不容易做到…

ssh中c3p0连接mysql_JSP+SSH+Mysql+C3P0实现的传智播客网上商城

项目简介本系统是传智播客授课时的开发案例,基于JSPSSHMysql的简单网上商城。在当代开发中,SSH的使用已经逐渐被SSM取代,但不代表我们不需要学习SSH,该系统简单,但功能齐全可以作为SSH框架初学者的入门项目。难度等级&…

zabbix配置mysql监控_【zabbix】zabbix配置MySQL监控

说明:除最后的测试步骤之外,以下操作均在zabbix的agent端(被监控端)执行一、环境准备:1、操作系统:CentOS 5.6 (zabbix server端)CentOS 5.6 (zabbix agent端)2、数据库:MySQL 5.6 (安装在agent端的数据库)3、软件&…

python把数据变为数据框_将Python dict转换为数据框

正如在另一个使用pandas.DataFrame()的答案中所解释的那样,这里的行为不会像您想象的那样。你可以做的是使用pandas.DataFrame.from_dict与orientindex:In[7]: pandas.DataFrame.from_dict({u2012-06-08: 388,u2012-06-09: 388,u2012-06-10: 388,u2012-0…

Java 静态变量和静态方法

在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为静态成员,归整个类所有。 静态成员不依赖于…

java 静态方法同步_Java – 同步静态方法

这是我的测试代码,表明你是对的,这篇文章有点过分谨慎:class Y {static synchronized void staticSleep() {System.out.println("Start static sleep");try {Thread.sleep(2000);} catch (InterruptedException e) {}System.out.println("End static…

北信源管理网页卸载密码_Homebrew: 一行代码实现mac软件管理

Homebrew是一款帮助我们管理软件的软件。任何开源软件都可以通过Homebrew的一行代码完成软件的下载、升级或卸载等。目前Homebrew主要适用macOS或Linux系统。(Windows系统下的类似软件叫Chocolatey,功能相近,使用方法类似。详情请见https://chocolatey.o…