linkin大话面向对象--构造器详解
对象的产生格式:类名称 对象名 = new 类名称();
因为有(),所以是方法,实际上它就是构造方法,并且是非私有的构造方法。如:CellPhone cp = new CellPhone();
构造器是一个特殊的方法,这个特殊方法用于创建实例时执行初始化。构造器是创建对象的重要途径,即使使用工厂模式,反射等方式创建对象,其实质依然是依赖于构造器,因此,java类必须包含一个或者一个以上的构造器。一旦自己显示的写了构造方法,那么java就不再为我们提供那个隐式的无参构造方法了。
特点:1,方法名与类名相同 2,不用定义返回值类型 3,不需要写return语句
作用:给类中的字段进行初始化,可以用来创建对象。
注意:多个构造方法是以重载的形式存在的。可以使用this在一个构造器中调用另外一个构造器。
构造器是创建java对象的途径,但不是说构造器完全负责创建java对象。实际上,当程序员调用构造器的时候,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象在构造器执行前就已经完成了。所谓的调用构造器来new对象,不过就是将上面那个已经存在的对象作为构造器的返回值来返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问这个对象。
通常建议为java类保留无参数的默认构造器,养成这种良好的习惯。
在软件开发中有一个规则,就是不要把相同的代码书写2次以上,充分的利用每一段代码,这样子可以让程序代码更加简洁,也可以降低软件的维护成本。
-
setter方法和构造方法都可以用来初始化字段的值,那么什么时候用构造方法什么时候用setter?
1,当字段的值是和类的对象紧密相关不可分割的时候,用构造方法,就是说我要有这个实例,就必须有这个字段值,就用构造方法。
2,需要初始化的字段值不太多的时候可以用构造方法,如果字段值太多,构造方法的参数列表太。。。了。
3,其他时候都可以用setter方法。
//测试构造器重载
public class ConstructorOverLoad {
private String name;
private int age; //默认的构造器
public ConstructorOverLoad(){ } public ConstructorOverLoad(String name){
this.name = name;
} public ConstructorOverLoad(String name,int age){
//通过this调用另一个重载的构造器的初始化代码
this(name);
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public static void main(String[] args) {
ConstructorOverLoad linkin = new ConstructorOverLoad();
ConstructorOverLoad linkin1 = new ConstructorOverLoad("linkinPark");
ConstructorOverLoad linkin2 = new ConstructorOverLoad("linkinPark",25);
} }
- 如何写出一个设计很好的类?
分析思路:
根据要求写出类所包含的字段;
所有的字段都必须私有化;
封装之后的字段可通过setter和getter设值和取得;
按需求可添加若干构造方法;
根据需求可添加相应的方法;
类中的所有方法都不要直接处理(输出打印),而是交给调用者去处理。
linkin大话面向对象--构造器详解的更多相关文章
- linkin大话面向对象--属性详解
成员变量和局部变量 成员变量: 1.在一个类中,任何方法之外定义的变量: 2.从面向对象的思想来说我们又把实例变量看成一个类的属性. 3.实例变量在没有符初值时系统会自动帮我们做初始化 ...
- linkin大话面向对象--方法详解
1,方法的参数传递机制:值传递. 首先弄懂2个概念:形参和实参. 形参(形式参数):相当于函数(Java中也把函数称之为方法)中的局部变量,在函数被调用时创建,并以传入的实参作为起始值,函数调用结束时 ...
- Java面向对象系列(5)- 构造器详解
构造器: 和类名相同 没有返回值 作用: new本质在调用构造器 初始化对象的值 注意点: 定义了有参构造之后,如果想要使用有参构造,必须显示的定义一个无参构造 IDEA快捷键: Alt + Inse ...
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- 关于javascript面向对象的详解!
认识面向对象 1.面向对象中的概念 一切事物皆对象 对象具有封装和继承特性 信息隐藏 2.基本面向对象 3.函数构造器构造对象 深入了解面向对象 第一种书写格式 第二种书写格式
- linkin大话面向对象--闭包和回调
先来理解2个概念:闭包和回调 什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...
- linkin大话面向对象--内部类
内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...
- linkin大话面向对象--枚举
枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...
- linkin大话面向对象--java关键字
java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract default null synchronized ...
随机推荐
- RedHat7下PostGIS源码安装
本文介绍在RedHat7环境下安装使用PostGIS的流程. 1. PostgreSQL 1.1 yum安装PostgreSQL 这个比较简单,直接使用yum安装即可. $ sudo yum inst ...
- 【转载】mysql主键的缺少导致备库hang
最近线上频繁的出现slave延时的情况,经排查发现为用户在删除数据的时候,由于表主键的主键的缺少,同时删除条件没有索引,或或者删除的条件过滤性极差,导致slave出现hang住,严重的影响了生产环境的 ...
- node 和git 在linux(centos) 上的安装
1. wget命令下载Node.js安装包. (该安装包是编译好的文件,解压之后,在bin文件夹中就已存在node和npm,无需重复编译.) wget https://nodejs.org/dist ...
- python * 的区别
>>> ['Spam']*5 ['Spam', 'Spam', 'Spam', 'Spam', 'Spam'] >>> ['Spam'*5] ['SpamSpamS ...
- .Net IOC框架入门之一 Unity
一.概述 IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一 ...
- 解决:java.io.IOException: No FileSystem for scheme: hdfs
解决:java.io.IOException: No FileSystem for scheme: hdfs 开发项目初期,写完代码开始放到服务器上开始测试的时候,报出这样的一个错,不知道怎么处理了, ...
- Android命令之-------ADB命令大全
1.显示当前运行的全部模拟器: adb devices2.启动ADB adb start-server3.停止ADB adb kill-server4.安装应用程序: adb ...
- Django_ajax
AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML".即使用Javascript语言与服务器进行异步交互,传 ...
- Grails框架使用指南
Grails框架使用指南,详解Grails框架!cnxieyang@163.com
- Java Web应用集成OSGI
对OSGI的简单理解 就像Java Web应用程序需要运行在Tomcat.Weblogic这样的容器中一样.程序员开发的OSGI程序包也需要运行在OSGI容器中.目前主流的OSGI容器包括:Apach ...