如果不定义生成方法,直接赋值将导致错误。
package com.im OOC.construction method; classexampleperson { public string name; 公共信息;
} public class example { publicstaticvoidmain { string [ ] args }
examplepersonmi=newexampleperson (' mi ',12 ); //不能这样直接参加
system.out.println(mi.name;
}
}
执行结果:
我们以前是这样的:
public class example2{ publicstaticvoidmain { string [ ] args }
examplepersonmi=newexampleperson (;
mi.name='mi '; //直接为字段分配值
system.out.println(mi.name;
}
}
当然,也可以设置以下方法:
公共void set name (string name ) {this.name=name;
}publicString getName () {returnname;
}
这样就可以取得值了。
mi.setname(mi );
system.out.println(mi.getname );
不过,这似乎有点麻烦。 以下是用python实例化对象的示例。
class student (对象) :
def __init__(self,name,score ) :
self.name=name
self.score=score
efprint_score(self ) :
print(3360%s ) self.name,self.score ) ) ) ) ) ) ) )。
接下来,采样如下:
Bart=student('BartSimpson ',59 ) )。
Lisa=student(LisaSimpson ),87 ) )。
实际上,python之所以能这样做是因为__init__是构造函数。 其实java也有构建方法
package com.im OOC.construction method; classexampleperson3{ privatestring name; 私有增量; publicexampleperson3(string name,intage ) {this.name=name; this.age=age;
}publicString getName () {returnname;
}公共集成() ) {returnage;
}
} public class example3{ publicstaticvoidmain { string [ ] args }
example person3gxdxtd=newexampleperson3(gxdxtd ),18 );
system.out.print ln (gxdxtd.getname );
system.out.print ln (gxdxtd.get age );
}
}
这样,您就可以在创建对象时实例化对象的属性。 这类似于python创建对象。
上面的构建方法与类名相同。 与普通函数不同,生成方法没有返回值。
请注意,必须使用new操作符才能调用构造方法。
1 .如何生成缺省
任何种类不都有结构吗? 是的。
在以前的许多例子中,我们没有配置方法,但是为什么可以进行new Person呢?
package com.im OOC.object oriented; classPerson {privateString name; 私有增量;
} publicclassobjectmethod { publicstaticvoidmain { string [ ] args }
Person ming=newPerson (;
ming.name='mingwang ';
ming.age=26;
system.out.println(ming.name;
}
}
如果类未设置构造函数方法,编译器将自动生成构造函数方法。 他既没有参数也没有句子。 就这样做。
类人员{
.公共人员() {
}
}
2.多构造方法
如果既要使用不带参数的构造方法,也想使用带参数的构造方法,那么就必须把两个构造方法都配置出来。
可以给一个类定义多个构造方法,在通过new操作符调用的时候,编译器会通过构造方法的参数数量、位置和类型来选择构造方法。
packagecom.imooc.constructionmethod;classExamplePerson3 {private String name = "gxdxtd";private int age = 18;public ExamplePerson3(String name,intage) {this.name =name;this.age =age;
}publicExamplePerson3() {this.name =name;this.age = 12;
}publicString getName() {returnname;
}public intgetAge() {returnage;
}
}public classexample3 {public static voidmain(String[] args){
ExamplePerson3 ming= new ExamplePerson3("ke",27);
System.out.println(ming.getName());//ke
System.out.println(ming.getAge()); //27
ExamplePerson3 笨笨的超短裙 = new ExamplePerson3("笨笨的超短裙"); //编译器会根据参数个数来选择构造方法
System.out.println(笨笨的超短裙.getName()); //笨笨的超短裙
System.out.println(笨笨的超短裙.getAge()); //12
}
}
构造方法还可以调用其他的构造方法,以此来提高代码的复用,通过this的形式。
packagecom.imooc.constructionmethod;classExamplePerson3 {private String name = "gxdxtd";private int age = 18;public ExamplePerson3(String name,intage) {this.name =name;this.age =age;
}publicExamplePerson3() {this("niao",3); //构造方法还可以调用其他的构造方法,通过this形式
}publicString getName() {returnname;
}public intgetAge() {returnage;
}
}public classexample3 {public static voidmain(String[] args){
ExamplePerson3 ming= new ExamplePerson3("ke",27);
System.out.println(ming.getName());//ke
System.out.println(ming.getAge()); //27
ExamplePerson3 笨笨的超短裙 = new ExamplePerson3(); // System.out.println(笨笨的超短裙.getName()); //niao
System.out.println(笨笨的超短裙.getAge()); //3
}
}
3.初始化赋值
在一个对象已经构造完成的时候,其属性其实已经填充完毕。
packagecom.imooc.constructionmethod;classExamplePerson3 {private String name; //null
private int age; //0
publicExamplePerson3() {}publicString getName() {returnname;
}public intgetAge() {returnage;
}
}public classexample3 {public static voidmain(String[] args){
ExamplePerson3 ming= newExamplePerson3();
System.out.println(ming.getName());//null
System.out.println(ming.getAge()); //0
}
}
在上述示例中,我们并没有赋值,但是每个属性都已经有值。
属性的默认值是其字段类型的默认值。
当然,还可以在定义属性的时候,直接定义值:
packagecom.imooc.constructionmethod;classExamplePerson3 {private String name = "gxdxtd";private int age = 18;publicString getName() {returnname;
}public intgetAge() {returnage;
}
}public classexample3 {public static voidmain(String[] args){
ExamplePerson3 ming= newExamplePerson3();
System.out.println(ming.getName());//gxdxtd
System.out.println(ming.getAge()); //18
}
}
那么,既对字段进行初始化,又调用了构造函数,字段该如何取值了?
packagecom.imooc.constructionmethod;classExamplePerson3 {private String name = "gxdxtd";private int age = 18;public ExamplePerson3(String name,intage) {this.name =name;this.age =age;
}publicString getName() {returnname;
}public intgetAge() {returnage;
}
}public classexample3 {public static voidmain(String[] args){
ExamplePerson3 ming= new ExamplePerson3("ke",27);
System.out.println(ming.getName());//ke
System.out.println(ming.getAge()); //27
}
}
在Java中创建对象示例的时候,按照如下顺序进行初始化:
(1)先初始化字段,如果没有给值,那么采用默认值。
(2)执行构造方法的代码进行初始化。
因此上方函数会显示构造方法的赋值。