处男贴关于构造方法的 http://zhidao.baidu.com/link?url=v9OUDF4f6yjkt4rX2E2vPq5BFlt2kqFb1lKleBvOL5iUQt1-5UKW0CoyF94ppF1LDebiSFMIiJ0f3TCRFz2sWK 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分配内存、创建对象是构造方法做的么?? jvm调用的指令多了去, 那我也觉得这是new起的作用, 别误导楼主了 从实质上说,构造方法不是初始化,而是实例化对象,即分配内存。个人学java不久,只理解到这,不知对否。 是吗,我才学到jdbc,加个好友呗 构造方法结合new()方法即可对对象赋值和分配内存,并且是先用new()方法对对象进行内存分配,再对对象赋值。这写和C++都差不多的,, 分配内存、创建对象是构造方法做的么?? jvm调用的指令多了去, 那我也觉得这是new起的作用, 别误导楼主了大哥,你酱油别打的这么深好么,构造更准确的是构造器,构造器主要就是实例化对象用的撒,比如反射,内省。进行属性值初始化也可以在定义的时候进行啊,如果定义就进行初始化那构造器岂不是没有处了??? 分配内存、创建对象是构造方法做的么?? jvm调用的指令多了去, 那我也觉得这是new起的作用, 别误导楼主了大哥,你酱油别打的这么深好么,构造更准确的是构造器,构造器主要就是实例化对象用的撒,比如反射,内省。进行属性值初始化也可以在定义的时候进行啊,如果定义就进行初始化那构造器岂不是没有处了???好复杂,菜鸟不懂 分配内存、创建对象是构造方法做的么?? jvm调用的指令多了去, 那我也觉得这是new起的作用, 别误导楼主了亲,构造方法也算是另类的的static,你调用math的static方法没有new吧!就这样吧 构造方法里对参数的设置,一般用来设置某对象的初始值,即在new的时候进行的操作。在.java文件中没看到构造函数并不表示该类没有,只是编译器会自动在编译的时候给你添加上去。构造函数和静态方法两个根本就是不同概念的东西,不能做类比的 分配内存、创建对象是构造方法做的么?? jvm调用的指令多了去, 那我也觉得这是new起的作用, 别误导楼主了亲,构造方法也算是另类的的static,你调用math的static方法没有new吧!就这样吧我是指,对于new Object()而言,这个构造方法并没有为这个对象的初始化做任何事情, 因为没有为属性赋值, 我这里所说的初始化不同于对象在内存中的初始化。 而且就算是jvm这一大堆的创建对象过程也是因为碰到了new这个关键字才触发的,只不过new + 构造方法 创建对象是Java的语法而已。你这里所谓"构造方法也算是另类的的static"是一些类加载的说法, 任何对于一个类的静态引用都会触发类加载, jvm规范明确规定,遇到new、gestatic、putstatic、invokestatic字节码指令时,需先触发类初始化。 new是唯一一个非静态调用。 就像19楼说的,构造函数和静态方法两个根本就是不同概念的东西,不能做类比的。 楼主这样的理解也没有什么不可以。其实我觉得很多书籍翻译成构造方法有不妥的地方,翻译为构造器更好一些。因为这不能理解为一个方法,它不同于一个对象的方法。构造方法到底是什么,其实这个问题没有必要去钻牛角尖深究,重要的是知道怎么用就可以了。其实java的很多东西我们都无法非常清晰的解释这到底是什么。因为java本身只是一个规范,具体的实现依赖于虚拟机。不同的虚拟机有不同的实现方式。 可以用来初始化参数,不过大多数时候可以用set/get来设置参数,这个是用情况看个人了..示例:package Other;/** * Created by puruidong on 2014/8/10. */public class TestDemo { //使用构造方法初始化. private String name; private int age; //使用set/get设置值. private String uname; private String sname; /*uname的set/get*/ public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } /*end.*/ /*sname的set/get*/ public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } /*end*/ /*name是private修饰的,因此需要提供一个get方法让外面可以访问.*/ public String getName() { return name; } /*end*/ /*获取age.*/ public int getAge() { return age; } /*end*/ public TestDemo(){}//空构造方法 public TestDemo(String name,int age){ this.name=name; this.age=age ;} public static void main(String[] args) { TestDemo t = new TestDemo("abc",10); //不推荐这样的获取方式,虽然可以目前可以正常获取,但是假如你在另一个类获取将会报错 System.out.println("使用构造方法初始化:姓名\t:"+t.name+"\t年龄\t:"+t.age); System.out.println("使用构造方法初始化:姓名\t:"+t.getName()+"\t年龄\t:"+t.getAge()); t.setSname("不说"); t.setUname("测试一下真实姓名"); System.out.println("使用set/get设置值:真实姓名\t:"+t.getUname()+"\t姓名\t:"+t.getSname()); }} 大部分是用来创建对象的吧。设置属性值用“setXXX”好像比较多。 java的构造函数其实很简单。一个类 被实例化 也就是被new的时候 最先执行的是 构造函数,如果你有留心。你会发现很多类里面根本没有写构造函数。在java类中,如果不显示声明构造函数,JVM 会给该类一个默认的构造函数。一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。当一个类声明了构造函数以后,JVM 是不会再给该类分配默认的构造函数。 新手实在搞不懂了,类调用问题。 如何用java将一个文本按段提取出来? 请问这里的Outer.this.a 应该如何理解??? 一個監聽器問題 oicq聊天机器人可以对着OICQ聊天室说个没完的家伙,据作者说,测试时有人不知道是程序,居然跟它聊 java新人求教JMF的问题 讨论:关于流方法的使用的 printWriter的问题 关于package应该放那里的问题? java反射机制如何 得到当前方法的 method对象 如何在Java类中初始化context-param -> listener -> filter -> servlet 八皇后算法问题
个人学java不久,只理解到这,不知对否。
大哥,你酱油别打的这么深好么,构造更准确的是构造器,构造器主要就是实例化对象用的撒,比如反射,内省。进行属性值初始化也可以在定义的时候进行啊,如果定义就进行初始化那构造器岂不是没有处了???
大哥,你酱油别打的这么深好么,构造更准确的是构造器,构造器主要就是实例化对象用的撒,比如反射,内省。进行属性值初始化也可以在定义的时候进行啊,如果定义就进行初始化那构造器岂不是没有处了???
好复杂,菜鸟不懂
亲,构造方法也算是另类的的static,你调用math的static方法没有new吧!就这样吧
构造函数和静态方法两个根本就是不同概念的东西,不能做类比的
亲,构造方法也算是另类的的static,你调用math的static方法没有new吧!就这样吧
我是指,对于new Object()而言,这个构造方法并没有为这个对象的初始化做任何事情, 因为没有为属性赋值, 我这里所说的初始化不同于对象在内存中的初始化。 而且就算是jvm这一大堆的创建对象过程也是因为碰到了new这个关键字才触发的,只不过new + 构造方法 创建对象是Java的语法而已。你这里所谓"构造方法也算是另类的的static"是一些类加载的说法, 任何对于一个类的静态引用都会触发类加载, jvm规范明确规定,遇到new、gestatic、putstatic、invokestatic字节码指令时,需先触发类初始化。 new是唯一一个非静态调用。 就像19楼说的,构造函数和静态方法两个根本就是不同概念的东西,不能做类比的。
楼主这样的理解也没有什么不可以。其实我觉得很多书籍翻译成构造方法有不妥的地方,翻译为构造器更好一些。因为这不能理解为一个方法,它不同于一个对象的方法。构造方法到底是什么,其实这个问题没有必要去钻牛角尖深究,重要的是知道怎么用就可以了。
其实java的很多东西我们都无法非常清晰的解释这到底是什么。因为java本身只是一个规范,具体的实现依赖于虚拟机。不同的虚拟机有不同的实现方式。
package Other;/**
* Created by puruidong on 2014/8/10.
*/
public class TestDemo { //使用构造方法初始化.
private String name;
private int age; //使用set/get设置值.
private String uname;
private String sname; /*uname的set/get*/
public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} /*end.*/ /*sname的set/get*/
public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
}
/*end*/ /*name是private修饰的,因此需要提供一个get方法让外面可以访问.*/
public String getName() {
return name;
}
/*end*/ /*获取age.*/
public int getAge() {
return age;
}
/*end*/ public TestDemo(){}//空构造方法 public TestDemo(String name,int age){
this.name=name;
this.age=age
;}
public static void main(String[] args) {
TestDemo t = new TestDemo("abc",10);
//不推荐这样的获取方式,虽然可以目前可以正常获取,但是假如你在另一个类获取将会报错 System.out.println("使用构造方法初始化:姓名\t:"+t.name+"\t年龄\t:"+t.age);
System.out.println("使用构造方法初始化:姓名\t:"+t.getName()+"\t年龄\t:"+t.getAge());
t.setSname("不说");
t.setUname("测试一下真实姓名");
System.out.println("使用set/get设置值:真实姓名\t:"+t.getUname()+"\t姓名\t:"+t.getSname());
}
}
一个类 被实例化 也就是被new的时候 最先执行的是 构造函数,如果你有留心。你会发现很多类里面根本没有写构造函数。
在java类中,如果不显示声明构造函数,JVM 会给该类一个默认的构造函数。一个类 可以有多个构造函数。构造函数的主要作用 一是用来实例化该类。二是 让该类实例化的时候执行哪些方法,初始化哪些属性。当一个类声明了构造函数以后,JVM 是不会再给该类分配默认的构造函数。