构造方法与匿名对象

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

  • 声明并实例化对象,这个时候实例化对象中的属性并没有任何的数据存在,都是其对于数据类型的默认值
  • 需要通过一系列的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进行回收和释放。

Java面向对象编程 -2.2的更多相关文章

  1. Java面向对象编程基础

    一.Java面向对象编程基础 1.什么是对象?Object 什么都是对象! 只要是客观存在的具体事物,都是对象(汽车.小强.事件.任务.按钮.字体) 2.为什么需要面向对象? 面向对象能够像分析现实生 ...

  2. java 面向对象编程。。。。

    经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...

  3. 《Java面向对象编程》

    <Java面向对象编程> 第11章 对象的生命周期 11.1  创建对象的方式 用new语句创建对象 运用反射手段,调用java.lang.Class 或者 java.lang.Const ...

  4. JAVA面向对象编程课程设计——网络版单机斗地主

    一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 JAVA面向对象编程课程设计--web版斗地主 吴修恩 JSP界面的 ...

  5. JAVA面向对象编程课程设计——web版斗地主

    一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...

  6. java面向对象编程知识点总结

    一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...

  7. Java面向对象编程(一)

    由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...

  8. JAVA学习(五):Java面向对象编程基础

    Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它採用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目 ...

  9. (一)如何理解java面向对象编程

    哲学中,事物总是螺旋式上升,波浪式前进.因而编程也逐渐向人类更容易理解的方向前进,多年来人们苦苦追求的编程境界 : 高扩展性(extensibility),高复用性(reuseable).java语言 ...

  10. java面向对象编程--第九章 多态和抽象

    9.1多态 在生物学中,是指一个生物或物种可以有多种不同的形式或阶段: 在OOP中,多态是指一个对象有多种形式的能力. 多态可以说是面向对象编程的精髓所在.java中之所以引入多态的概念,原因之一是它 ...

随机推荐

  1. jumpserver 常见错误解决

    官方链接:https://jumpserver.readthedocs.io/zh/master/faq_install.html 重启jumpserver后台 #cd /opt#python3.6 ...

  2. D. Mahmoud and Ehab and another array construction task 因子分界模板+贪心+数学

    D. Mahmoud and Ehab and another array construction task 因子分解模板 题意 给出一个原序列a 找出一个字典序大于a的序列b,使得任意 \(i!= ...

  3. 每天进步一点点------Allegro使用脚本记录文件设置工作环境的颜色

    script脚本文件在Allegro PCB DESIGN中能完成很多参数设定,功能很强大.使用script脚本我们能够快速定制自己的Allegro workbench environment. 案例 ...

  4. [AGC027A]Candy Distribution Again

    Description AGC027A 你有一些糖果,你要把这些糖果一个不剩分给一些熊孩子,但是这帮熊孩子只要特定数目的糖果,否则就会不开心,求最多的开心人数. Solution 如果\(\sum a ...

  5. pwnable.kr-echo1-Writeup

    pwnable.kr - echo1 - writeup 原文链接:https://www.cnblogs.com/WangAoBo/p/pwnable_kr_echo1.html 旧题新做,发现这道 ...

  6. c++指针,引用,日期,输入输出和数据结构

    1,指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: int *ip; /* ...

  7. vue入门基础知识点测试

    vue入门基础知识点测试 1.文本(值绑定){{var}}----控制<div></div>的值显示当前时间,且1秒更新一次.(可查阅 setinterval 函数,时间Dat ...

  8. 微信小程序苹果手机调用camera原生组件拍照后不退出

    最近做微信小程序时,用到小程序的原生组件camera时,踩到一个bug. 在给camera设置样式position:absolute;绝对定位后,IOS调用camera原生组件拍照后退不出来. 不使用 ...

  9. Adobe PS

    1. ctrl + Tab  切换视图窗口 2.shift 拖拽图片,将 2 张图片放在一起 3.切换显示方式 /全屏/带有工具栏 快捷键:F 4. 缩小/放大工具 快捷键: alt + 鼠标滑轮 5 ...

  10. 每天进步一点点------Error: Can't place pins assigned to pin location Pin_K22 (IOPAD_X41_Y19_N14)

    在QII中的Assignments----Device----Device and pin option-----(选项卡)Dual purpose pin将nCE0 的设置改为: use as re ...