如何理解构造方法?在类中得作用是什么??第一次发问,请大哥支持下
解决方案 »
- Comparator排序题
- 使用URL类下载一个图片文件抛ClientAbortException
- 请教Swing关于焦点显示效果的问题。
- 大三了,现在才从0开始学习java,有什么好书或秘诀教教小弟
- JButton 中文乱码
- 在复制中如何把选顶的字符传到剪砌版里
- 我新开了一个QQ群,叫近来兴JAVA,欢迎大家加进去讨论,号码是10973032
- 100分求java正则表达式写法
- 我写了一个使用Jtable,abstractModel的来将数据库中数据显示的程序(附原码),但速度较慢,请各位进来看看!!!!
- java在中国的前途将会极其艰难
- java能 开发 桌面应用程序吗? 或者说java 开发 的桌面应用程序有实际应用吗?
- 快点来个懂JAAS的吧
答:兄弟是第一次发问,大哥我就第一次回答支持.要考虑构造方法的作用,表思考下条语句:MyCLass mo=new MyClass();这个:new MyClass() 它内部究竟是如何执行的?
1)第一步:执行new 运算符.其作用是:从堆中"挖出"一块内存空间(空间大小与性质由类MyClass决定)
2)第二步:对"挖出"的这块内存空间,将其"地址"传入MyClass()这个构造方法,最主要的作用是:对这块空间进行初始化.(变量没有初始化,是不能直接拿来用的.同样:一个对象的空间没有正确初始化,该对象是不允许拿去使用的) 当然初始化后,也可以继续执行其它你写的语句.
3)第三步:构造方法中代码执行完毕之后,才将该对象的引用赋值给变量mo.
public class person{
private String name;
private int age; public person(){} --不带参数的构造函数,如果你不写,程序将自动创建
public person(String name,int age){ --带参数的构造函数
this.name = name;
this.age = age;
} public void Print(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}public static void main(String[] args){
person zhangsan = new person(); --请看,括号里为空,它就调用不带参数的构造函数
zhangsan.name = "张三";
zhangsan.age = 18;
zhangsan.Print();
person lisi = new person("李四",20); --括号里的“李四”对应带参构造函数的String name,年龄同理
lisi.Print();
}
}这下明白了吧?这些代码都是我自己一点一点敲出来的噢!这分你不给我就不够意思哈!呵呵~~
不带参数的构造器自动被赋予默认值,例子中的name被赋予null,age被赋予0:public class person{
private String name;
private int age; public person(){}
public person(String name,int age){
this.name = name;
this.age = age;
} public void Print(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
} public static void main(String[] args){
person zhangsan = new person();
zhangsan.Print(); 打印结果为:
姓名:null
年龄:0
http://www.yesky.com/149/1636649.shtml
如下例: 例一:
package sample;
public class A{
A(){
System.out.println("主类构造函数调用");
}
public static void main(String args[]){
A g=new A();
subA s=new subA();
} }
class subA extends A{ }
执行结果为:
主类构造函数调用
主类构造函数调用
本例中子类subA中没有任何方法,所以隐含调用super(),super()指向A()。
例二:
package sample;
public class A{
A(){
System.out.println("主类构造函数调用");
}
public static void main(String args[]){
A g=new A();
subA s=new subA();
} }
class subA extends A{
public subA(){
}
}
执行结果为:
主类构造函数调用
主类构造函数调用
本例中子类subA只有一个空方法suba()中没有任何方法,所以也隐含调用super(),super()指向A()。
例三:
package sample;
public class A{
A(){
System.out.println("主类构造函数调用");
}
public static void main(String args[]){
A g=new A();
subA s=new subA();
} }
class subA extends A{
public subA(){
System.out.println("子类构造函数调用");
}
}
执行结果为:
主类构造函数调用
主类构造函数调用
子类构造函数调用
本例中子类subA的方法subA()虽然后输出但同上例中相同都为构造函数,所以也隐含调用super(),super()指向A()。