Java构造方法定义、对象实例化的过程、对象的引用和实体
Java构造方法定义:
一、在类中,构造方法是一个特殊的方法,当程序用某个类创建对象时,需要使用这个类中的构造方法进行创建;
如下演示: 通过 Structure_Method_Test() 构造方法 创建(实例化)了 类 Structure_Method_Test 的一个对象 smtest
public class Structure_Method_Test { Structure_Method_Test(){} //构造方法创建
public static void main(String[] args) { Structure_Method_Test smtest = new Structure_Method_Test(); //对象创建}
}
简单的说:构造方法 就是配合 new运算符 实例化一个该类的对象;
二、类中的构造方法的名字必须与类名相同,而且方法是没有类型的;
如下演示: void Structure_Method_Test(){} //不是构造方法,是类型为void的方法
public class Structure_Method_Test { Structure_Method_Test(){} //构造方法创建void Structure_Method_Test(){} //该方法不是构造方法,是类型为void的方法public static void main(String[] args) { Structure_Method_Test smtest = new Structure_Method_Test(); //对象创建}
}
三、在一个类中可以同时声明多个构造方法,但是这些构造方法的参数必须是不同的;
(参数不同指:参数的个数不同,名字不同、或 参数个数相同,参数列表中某个个数的类型不同 )
如下演示:
public class Structure_Method_Test {Structure_Method_Test(int a){} //构造方法1Structure_Method_Test(int a,int b){} //构造方法2Structure_Method_Test(double a,int b){} //构造方法3public static void main(String[] args) {Structure_Method_Test smtest = new Structure_Method_Test(3,5);}}
在以上代码中,构造方法1 与 构造方法2 的参数个数不同 ;构造方法2 与 构造方法3 个数相同,但是参数列表中 a 的类型不同;
构造方法特别注意:
一、当程序中某个类没有声明构造方法,那么系统会默认该类只有一个构造方法,并且这个构造方法是没有参数和方法体的,是由系统默认创建的;
如下演示:
class Default_Test{Default_Test(){}}
二、当程序中某个类声明了 多个构造方法,那么系统就不会再为该类创建默认的构造方法了;
如下演示: Structure_Method_Test smtestone = new Structure_Method_Test(); 是错误的
public class Structure_Method_Test {Structure_Method_Test(int a){} //构造方法1Structure_Method_Test(int a,int b){} //构造方法2public static void main(String[] args) {//报错,此时是没有默认的构造方法的,所以 () 中的参数必须要和构造方法中参数对应;Structure_Method_Test smtestone = new Structure_Method_Test(); //如下创建的构造方法是正确的 Structure_Method_Test smtest; //对象的声明smtest = new Structure_Method_Test(1); //为声明的对象进行分配变量,使用构造方法2//声明对象的同时 为 声明的对象进行分配变量,使用构造方法3Structure_Method_Test smtestone = new Structure_Method_Test(11,111); }
}
Java构造方法实例化对象过程:
创建一个对象包括 对象的声明 和 为对象分配变量 两个部分;
一、对象的声明
一般格式为: 类名 对象名 ;
如: Default_Test testone ; 或者 Default_Test test1 , test2 , test3 ;
二、为对象分配变量,完成对象的实例化
使用 new 运算符和类的构造方法为声明的变量分配变量,即完成对象的实例化;
如下演示:
public class Structure_Method_Test {Structure_Method_Test(){} //构造方法1Structure_Method_Test(int a,int b){} //构造方法2public static void main(String[] args) {Structure_Method_Test smtest; //对象的声明smtest = new Structure_Method_Test(); //为声明的对象进行分配变量,使用构造方法1//声明对象的同时 为 声明的对象进行分配变量,使用构造方法2Structure_Method_Test smtestone = new Structure_Method_Test(3,5); }
}
对象的使用:
一、对象不仅可以操作自己的变量改变状态,还可以调用类中的方法产生一定的功能;
二、对象通过使用运算符 " . " ,可以实现对自己 变量的访问 和 方法的调用;(前提是对象创建之后,而不是仅仅声明)
访问格式为: 对象 . 变量名 ; 对象 . 方法名(" ") ;
三、对象体现的封装性,即当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量;
如下演示:
public class Method_Test {double sum,number;String speak,action ;void behaviour (String st){action = st;sum = 1 + 10 ;System.out.println(action+" " + sum);}public static void main(String[] args) {Method_Test test1 = new Method_Test(); //创建对象test1Method_Test test2 = new Method_Test(); //创建对象test2test1.number = 123456 ;test2.number = 789 ;System.out.println("test1的number值="+test1.number);System.out.println("test2的number值="+test1.number);test1.speak = "这个speak是属于对象test1的";test1.speak = "这个speak是属于对象test2的";System.out.println("test1的speak值="+test1.speak);System.out.println("test2的speak值="+test1.speak);test1.behaviour("我想唱歌");test2.behaviour("我想跳舞");}}
程序输出:
test1的number值=123456.0
test2的number值=123456.0
test1的speak值=这个speak是属于对象test2的
test2的speak值=这个speak是属于对象test2的
我想唱歌 11.0
我想跳舞 11.0
在以上代码的 behaviour 方法,可以进行操作成员变量 action 与 sum ,当创建的对象 test1,test2 调用该方法时,方法中出现的成员变量分别是 test1,test2 对象的成员变量;
对象的引用和实体:
对象的引用:
指在创建对象时,new 运算符 只能和 类的构造方法进行运算,运算的结果是一个十六进制数,这是数就说明对象的引用;
如:new Method_Test(); 的值就是一个 引用 ;
对象的实体:
指在Java中,对象负责存放引用的,以确保对象可以操作分配给该对象的变量以及调用类中的方法,其中分配给该对象的变量也是平时所说的对象的实体;
一、没有实体的对象称为空对象,空对象是不能进行使用的,即不能调用方法产生行为;
如下演示:
public class Method_Test {double sum,number;String speak,action ;void behaviour (String st){action = st;sum = 1 + 10 ;System.out.println(action+" " + sum);}public static void main(String[] args) {Method_Test test1 = new Method_Test(); //创建对象test1Method_Test test2 ; //声明对象test2,此时对象为空对象test1.number = 123456 ;test2.number = 789 ; //错误,此时对象为空对象System.out.println("test1的number值="+test1.number);test1.behaviour("我想唱歌");test2.behaviour("我想跳舞"); //错误,此时对象为空对象}}
以上代码中,test2.number 与 test2.behaviour("我想跳舞"); 都是错误的,因为 test2 只是进行了声明,还未创建;
二、若一个类声明的两个对象具有相同的引用,那么二者具有的实体也是一样的;
如下演示:
public class Method_Test {double sum,number;String speak,action ;void behaviour (String st){action = st;sum = 1 + 10 ;System.out.println(action+" " + sum);}public static void main(String[] args) {Method_Test test1 = new Method_Test(); //创建对象test1Method_Test test2 = new Method_Test(); //声明对象test2System.out.println("test1的引用值="+test1);System.out.println("test2的引用值="+test2);test1 = test2 ;System.out.println("test1的引用值="+test1);System.out.println("test2的引用值="+test2);}}
代码输出结果:
test1的引用值=Chapter_Four.Method_Test@7852e922
test2的引用值=Chapter_Four.Method_Test@4e25154f
test1的引用值=Chapter_Four.Method_Test@4e25154f
test2的引用值=Chapter_Four.Method_Test@4e25154f
三、Java中 “垃圾回收机制”
垃圾回收机制指系统程序会周期性的检测某个实体是否已不再被任何对象所拥有,如果发现这样的实体,则系统会自动释放实体占有的内存;
如下演示:
public class Method_Test {Method_Test(){}Method_Test(int x,int y){}public static void main(String[] args) {Method_Test test1 = new Method_Test(); //创建对象test1Method_Test test2 = new Method_Test(1,11);; //创建对象test2System.out.println("test1的引用值="+test1);System.out.println("test2的引用值="+test2);test1 = test2 ;System.out.println("test1的引用值="+test1);System.out.println("test2的引用值="+test2);}}
在以上代码中,执行 test1 = test2 ; 语句后,test1 的 引用就会与 test2 引用一样,而之前创建时 test1 引用中的实体将被系统进行回收;
Java构造方法定义、对象实例化的过程、对象的引用和实体相关推荐
- JavaScript - 对象实例化、调用对象的属性及方法
<html><head><head><body><script language="javascript">//对象简单 ...
- 从JVM看类的加载过程与对象实例化过程
一. 类的加载过程 1. 类的加载过程大致是个什么过程? 我们编写产生.java文件,这些.java文件经过Java编译器编译成拓展名为.class的文件,.class文件中保存着Java代码经转换后 ...
- java对象实例化内存布局与访问定位
文章目录 1. 对象实例化方式 2. 对象创建的步骤 3. 对象的内存布局 4. 对象的访问定位 1. 对象实例化方式 通过new的方式,例如 Persion p = new Persion() 通过 ...
- java类怎么实例化_Java类的定义及其实例化
如果你不了解类和对象的概念,请看我往期文章. 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ ...
- java类的定义的实例_《Java基础知识》Java类的定义及其实例化
类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public classDog { String name;intage;void ...
- Java知多少(18)类的定义及其实例化
类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: 1 public class Dog{ 2 String name; 3 int ...
- 欧尼酱讲JVM(18)——对象实例化内存布局与访问定位
目录 对象的实例化 创建对象的几种方式 从字节码角度看对象的创建过程 对象创建的六个步骤 第一步:判断对象对应的类是否加载.链接.初始化 第二步:为这个对象分配内存 第三步:处理并发安全问题 第四步: ...
- 定义一个dog类java_Java类的定义及其实例化
如果你不了解类和对象的概念,请猛击这里:Java类和对象的概念 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public cl ...
- 识别无效对象和不可用对象
---------- pl/sql对象和视图可能变得"无效(invaid)":索引可能变得"不可用(unusable)" 根据对象无效的原因,下次访问时,对象可 ...
最新文章
- 让Asp.NET的DataGrid可排序、可选择、可分页
- Linux系统主要目录及作用
- C# 使用 Lotus notes 公共邮箱发送邮件
- [2017.02.07] Lua入门学习记录
- C++求字符串长度的两种方法
- 数据库系统原理笔记:关系数据库设计
- 如果面试官问您还有什么问题要问的,应该如何巧妙的回答才算合适呢?
- 华为p10刷原生android,华为p10怎么刷机 华为p10刷机方法【详细介绍】
- 软件项目管理1:开发计划和版本计划举例
- Win10不相邻的磁盘怎么合并,一学就会
- u检验中的查u界值表_u检验
- 百度竞价有没有好的推广方法?
- 计算机英语吕,吕的英语_我姓吕托福注册姓名的英文姓是写LYU还是LV还是LU我的护照上写的是LYU_淘题吧...
- html5添加音波波形图,wavesurfer.js绘制音频波形图的实现
- 2021 苟且活着,2022 向上生长
- 故障恢复控制台应用指南
- 桌面Ubuntu卡死解决方案
- Effective Modern C++读书笔记
- 微信公众平台对接C#-普通消息接收
- 跨站脚本攻击-----为什么要过滤危险字符串
热门文章
- 我接的是地啊,不,你接的是土!
- 【C语言】-万字博客详解任意棋盘的三子棋小游戏!!!快进来瞅瞅吧
- “金九银十”求职指南:这些城市和行业最热门!
- matlab 保存当前图像,Matlab保存图像的方法总结
- 通过抓包获取内涵段子的接口
- android 输入法 悬浮窗口,Android EditText悬浮在输入法之上
- 【Linux】ps和top进程管理命令
- Kafka+Storm+HBase项目Demo(5)--topology,spout,bolt使用
- 互联网告别免费时代,准备好了吗?
- Linux内核移植流程 应该怎么开始着手