第三章、面向对象-构造方法

1.7构造方法的讲解

关于java类的构造方法

意义就是通过定义一个构造方法,使得其所在的类能够在主程序中随时创建一个位于堆内存的这个函数就对象,

这样的话,只要new能创建一个对象随时访问。

1、构造方法又被称为构造函数/构造器/constructor

2、构造方法语法结构:

[修饰符列表]构造方法名(形式参数列表)

{

构造方法体;

}

3、回顾普通方法的语法结构:

[修饰符列表]构造方法名(形式参数列表)

{

方法体;

}

4、对于构造方法来说“返回值类型”不需要指定,并且也不能写void,

只要写上void,那么这个方法就成为了普通方法。

5、对于构造方法来说,构造方法的方法名和类名保持一致。

6、构造方法的作用:

构造方法存在的意义是,通过构造方法的调用,可以创建对象。

7、构造方法应该怎么调用?

普通方法是这样调用的:方法修饰符中有static的时候:类名:方法名(实参列表),方法修饰符列表中没有static的时候:引用.方法名(实参列表)

构造方法调用的方式:new构造方法名()

8、构造·方法调用执行之后有返回值吗?

每一个构造方法实际执行结束之后都有返回值,但是这个return值;这样的语句不需要写,构造方法结束的时候java程序自动返回值。

并且返回值类型是构造方法所在类的类型,由于构造方法的返回值类型是类本身,所以返回值类型不需要编写。

9、myeclipse注释和取消注释快捷键ctrl+/,多行注释ctrl+shift+/;

10、当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数构造方法,这个构造方法被称为缺省构造器。

11、当一个类显示的将构造方法定义出来了,那么系统则不再默认为这个类提供缺省构造器,建议开发中手动的为当前类提供无参数构造方法,因此无参数构造方法太常用了。

12、构造方法支持重载机制,在一个类当中编写多个方法,这多个构造方法显然已经构成方法重载机制。(即通过不同类型的实参,调用同一个方法实现不同功能)

public class User()

{

public User(int i)//1

{

}

}

public class ConstructorTest

{

public static void main(String[]args)

{

//创建User对象

//调用User类的构造方法来完成对象的创建

User u=new user()

}

}

如果1处注释掉,则情况就是第十个情况系统会给给这个类提供一个无参数构造方法

如果1处不注释掉,则会报错,因为user()与user(int i)不同,因此报错会提示没有定义user()。

public class User()

{

public User()//1

{

System.out,println("user's Default Constructor Invoke!");

}

public User(int i)//1

{

System.out,println("int");

}

public User(string i)//1

{

System.out,println("string");

}

public User(int i,string j)//1

{

System.out,println("int,string");

}

}

public class ConstructorTest

{

public static void main(String[]args)

{

//创建User对象

//调用User类的构造方法来完成对象的创建

//以下程序创建了4个对象,只要构造函数调用就会创建对象,并且一定是在“堆内存”中开辟内存空间。

User u=new user();//user()实际上是构造方法的方法名。

User u=new user(10);

User u=new user(“张三”);

User u=new user(10,“张三”);//方法的重载

//调用static的方法:类名.

ConstructorTest.dosome();//执行一遍dosome

dosme();//类内方法的调用,再次执行一遍dosome

//调用没有static的方法:引用.

//doOther方法在ConstructorTest对象,调用无参数构造方法。

//创建ConstructorTest01对象,调用无参数构造方法。

ConstructorTest t=new ConstructorTest();//一个类中没有任何构造方法的话,系统默认提供一个无参数构造器。

t.doother();

}

/**

*这是一个带有static的方法,方法名dosome

*/这个注释将会被放在系统的dosome解释中

public static void dosome()

{

System.out,println("dosome");

}

public  void doother()

{

System.out,println("doother");

}

}

构造方法的另一个作用;

1、创建对象

2、创建对象的同时,初始化实例变量的内存空间。成员变量之实例变量没有手动赋值的时候,系统默认赋值,南无这个系统默认赋值是在什么时候完成的呢?

不是,因为在类加载的时候只加载代码片段,还没来得及创建对象。所以此时实例变量都没有初始化。

实际上,实测变量的内存空间是在构造方法执行过程当中完成开辟的。完成初始化的。

系统在默认赋值的时候,也是在构造方法过程当中完成的赋值。

实例变量默认值:

int short byte long 0

float double 0.0

boolean false true

实例变量是存储在jvm堆内存中

public class Account

{

private String actno;//赋初值null

private double balance;

}

public class ConstructorTest

{

public static void main(String[]args)

{

//在eclipse中查看访问的是哪个属性,查看访问的是哪个方法?

//按ctrl键,鼠标移动到查看的元素上;出现下划线时候开始单击。

//创建对象

Account act1=new Account();

System.out,println("账号"+);

}

}

ctrl+o:查看类中的元素

mydeclipse快速编辑支持多行同时编辑:块编辑

封装:属性私有化,set和get

对象和引用

引用:可以是局部变量也可以是成员变量。

public class Test

{

public static void main(String[]args)

{

int i=10;

add(i);

System.out,println("main-->"+i);//10

}

public static void add(int i)

{

i++;

System.out,println("add-->"+i);//11

}

}

因为当方法调用完i后并不会返回i的值,因此i会恢复原来的值。

从内存的角度来说是main中的i内存地址中的10复制了之后给了add方法中,让add进行操作,这并不会影响main中i的值。因此,参数传递时,实际上传递的是参数值而非地址。

public class Test

{

public static void main(String[]args)

{

user u=new User(20);

add(u);

System.out,println("main-->"+u.age);//21

}

public static void add(int i)

{

u.age++;

System.out,println("add-->"+u.age);//21

}

}

class User

{

int age;

public User(int i)

{

age=i

}

}

这里体现出了变量和引用之间的区别,引用的自加是从被指向对象的真实地址上进行操作,因为引用中保存的是对象的地址。因此可以做到即使函数结束改变的量依旧被改变

而变量赋值改变仅仅是将复制的值传给函数,并未从实际意义上改变变量的值,也就是用完就丢弃,不会重新传给变量。

方法调用的时候,关于参数传递问题,传递的时候,java只遵循一种语法机制,就是将变量中保存的“值”传递过去了,只不过有的时候这个值是一个字面值10,有的时候是另一个Java对象的内存地址0x1234

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容