构造方法与匿名对象

现在的程序在使用类的时候一般都按照了如下的步骤进行:

  • 声明并实例化对象,这个时候实例化对象中的属性并没有任何的数据存在,都是其对于数据类型的默认值
  • 需要通过一系列的setter方法为类中的属性设置内容。

    等于说现在要想真正获取一个可以正常使用的实例化对象,必须经过两个步骤才可以完成

但是如果按照这样的方式来进行思考的话 就会发现一个问题:假设说现在类中的属性很多个(8个),这样一来按照我们之前的做法,此时我们需要调用多次(8次)的setter方法进行内容设置

这样的调用实在是太罗嗦了,所以在java里面为了考虑到对象初始化的问题,专门提供有构造方法。

即:可以通过构造方法实现实例化对象的属性初始化处理。只有在关键字new的时候使用构造方法。

在Java程序里面构造方法的定义要求如下:

  • 构造方法名称必须与类名称保持一致
  • 构造方法不允许设置任何的返回值类型,即没有返回值定义
  • 构造方法是在使用关键字new实例化对象的时候自动调用的
class Person{
private int age;
private String name; public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
public void setName(String n) {
name = n;
}
public String getName() {
return name;
} public void intorduce() {
System.out.println("age= "+age+" name= "+name);
}
public Person(int a ,String n) {//有参构造
age = a;
name = n;
}
}
public class xxx {
public static void main(String[] args) {
Person per1 = new Person(18,"sakura");
per1.intorduce();
} } >>>age= 18 name= sakura

在Java程序里面考虑到程序结构的完整性,所以所有的类中都会提供有 构造方法,如果现在你的类中没有定义任何的构造方法,那么一定会默认提供一个无参的,什么都不做的构造方法。

这个构造方法是在程序编译的时候自动创建的。如果你已经在类中明确地定义有一个构造方法的时候,那么这个默认的构造方法将不会被自动创建。

结论:一个类至少存在有一个构造方法

疑问:为什么构造方法不允许设置返回值类型?

既然构造方法也是一个方法,那么为什么不让它定义返回值类型呢?

既然构造方法不会返回数据,为什么不使用void定义呢?

分析:程序编译器是根据代码结构来进行编译处理的,执行的时候也是根据代码结构来进行处理的。

如果在构造方法上使用了void,那么此结构就与普通方法的结构完全相同了,这样编译器会认为此方法是一个普通方法。

普通方法和构造方法最大的区别:构造方法是在类对象实例化的时候调用的,而普通方法是在类对象实例化产生之后调用的。

既然构造方法本身是一个方法,那么方法就具有重载的特点,而构造方法重载的时候只需要考虑参数的类型及个数即可。

class Person{
private int age;
private String name; public void setAge(int a) {
age = a;
}
public int getAge() {
return age;
}
public void setName(String n) {
name = n;
}
public String getName() {
return name;
} public void intorduce() {
System.out.println("age= "+age+" name= "+name);
}
public Person(int a ,String n) {//有参构造
age = a;
name = n;
}
public Person() {//无参构造
age =12;
name = "sax";
}
}
public class xxx {
public static void main(String[] args) {
Person per1 = new Person();
per1.intorduce();
} } >>>age= 12 name= sax

在进行多个构造方法定义的时候强烈建议大家有一些定义的顺序,例如:可以按照参数的个数降序或者升序排列

经过了分析之后可以发现,利用构造方法可以传递属性数据,于是现在进一步分析对象的产生格式:

  • 定义对象的名称:类名称 对象名称 = null
  • 实例化对象:对象名称 = new 类名称()。

    如果这时候只是通过实例化对象来进行类的操作也是可以的,而这种形式的对象由于没有名字就称为匿名对象
public class xxx {
public static void main(String[] args) {
new Person().intorduce();
}
>>>age= 12 name= sax

此时依然通过了对象进行了类中introduce方法的调用,但是由于此对象没有任何的引用名称,所以该对象使用了一次之后就将成为垃圾,

而所有的垃圾将被GC进行回收和释放。

最新文章

  1. .NET Oracle Developer的福音——ODP.NET Managed正式推出
  2. CSS3混合模式background-blend-mode
  3. CPU虚拟化技术(留坑)
  4. jQuery 文档操作方法(w3school)
  5. react服务端/客户端,同构代码心得
  6. OWASP-ZAP
  7. 函数(jquery)
  8. 个人封装的一个Camera类
  9. Ubuntu12.04下使用virtualbox4.3.12 amd64安装XP系统教程
  10. 华硕笔记本进pe之前的设置
  11. shell中的crontab定时任务
  12. Java Number & Math 类
  13. java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
  14. [转载]震惊!QWidget竟然可以嵌入到QML中,QMl窗口句柄竟然是这样获取
  15. 11204RAC-dbca建库脚本
  16. CloudFlare Support - Error 522: Connection timed out 错误522:连接超时
  17. EnrichPipeline文档
  18. Nginx Web服务(一)
  19. k-Nearest Neighbor algorithm 思想
  20. SpringCloud分布式开发五大神兽

热门文章

  1. Javascript标准参考教程学习记录
  2. bootstrap环境
  3. truffle编译合约常见问题及其在私链上的部署与交互
  4. ($children,$refs,$parent)的使用
  5. 作业2:go实现一个压测工具,具备upload功能
  6. PHP通过thrift2访问HBASE
  7. C#系统库的源代码
  8. LoadRunner通过火狐浏览器录制脚本后,进行回放时,回放脚本很慢
  9. 一些基础但有趣的shell脚本
  10. VS常用快捷键(2012)