有一个更好的比喻是:class 是饼干(甜饼)制造机器,而 通过引用把它放到磨具里(指向),接着要实例化,就是制造过程,出来的东西就是饼干(甜饼),也就是对象。 这个比喻好像不是很恰当. 比如定义一个类 class Machine { } 那么在实例化的时候 class A{ Machine m = new Machine(); } 你可以说m是甜饼吗?
那么在实例化的时候 class A{ Machine m = new Machine(); }这是在声明,不是在实例化
比如我们定义为 abstract class Machine{.....} 再有 class firstMachine extends Machine{ public fistMachine(String n, double s){ name=n; speed=s;} ...... private String name; private double speed;} 这时候我们再 class A{ Machine m = new Machine(2); Machine[0]=new firstMachine("M3902",50);//这里才是实例化了 }
--------------------------- Machine m = new Machine(2); ------------------------------ 你写的啥奥? abstract class 也能new????????????????????
////你把这行也称为new class???????????? class AAA{ public static void main(String[] args){ BBB[] b= new BBB[3]; ////你把这行也称为new class???????????? for(int i=0;i<3;i++){ b[i]=new BBB(); System.out.println("第"+i+"个"); b[i].sayhello(); } } } class BBB{ void sayhello(){System.out.println("hhhhh");} }
class A{ Machine[] m = new Machine[2]; //定义 Machine[0]=new firstMachine("M3902",50);//这里才是实例化了 }
一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C 或C++里的指针)?
所有这些在Java 里都得到了简化,任何东西都可看作对象。因此,我们可采用一种统一的语法,任何地方均
可照搬不误。但要注意,尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”
(Handle)。在其他Java 参考书里,还可看到有的人将其称作一个“引用”,甚至一个“指针”。可将这一
情形想象成用遥控板(句柄)操纵电视机(对象)。只要握住这个遥控板,就相当于掌握了与电视机连接的
通道。但一旦需要“换频道”或者“关小声音”,我们实际操纵的是遥控板(句柄),再由遥控板自己操纵
电视机(对象)。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电
视机。
此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由于拥有一个句柄,并不表示必须有一个对
象同它连接。所以如果想容纳一个词或句子,可创建一个String 句柄:
String s;
但这里创建的只是句柄,并不是对象。若此时向s 发送一条消息,就会获得一个错误(运行期)。这是由于
s 实际并未与任何东西连接(即“没有电视机”)。因此,一种更安全的做法是:创建一个句柄时,记住无
论如何都进行初始化:
String s = "asdf";
这个比喻好像不是很恰当.
比如定义一个类
class Machine {
}
那么在实例化的时候
class A{
Machine m = new Machine();
}
你可以说m是甜饼吗?
我们可以理解在图纸上的饼干机模型是一个类, 说明了这个饼干机的构造, 使用方法等等.
而真正在工厂里的饼干机则是饼干机模型的一个实例, 这样的实例可以有n多个. 至于饼干, 那是另外一个相关的类.
而引用在Java里面基本已经不谈了, 因为Java没有什么传置, 传值的问题. 对象实例都是传置的, 也就是传递一个对象的引用, 相当于指针吧. 基本类型都是传值的.
class A{
Machine m = new Machine();
}这是在声明,不是在实例化
abstract class Machine{.....}
再有
class firstMachine extends Machine{
public fistMachine(String n, double s){
name=n;
speed=s;}
......
private String name;
private double speed;}
这时候我们再
class A{
Machine m = new Machine(2);
Machine[0]=new firstMachine("M3902",50);//这里才是实例化了
}
Machine m = new Machine(2);
------------------------------
你写的啥奥?
abstract class 也能new????????????????????
class AAA{
public static void main(String[] args){
BBB[] b= new BBB[3]; ////你把这行也称为new class????????????
for(int i=0;i<3;i++){
b[i]=new BBB();
System.out.println("第"+i+"个");
b[i].sayhello();
}
}
}
class BBB{
void sayhello(){System.out.println("hhhhh");}
}
Machine[] m = new Machine[2]; //定义
Machine[0]=new firstMachine("M3902",50);//这里才是实例化了
}
而引用在Java里面基本已经不谈了, 因为Java没有什么传置, 传值的问题. 对象实例都是传置的, 也就是传递一个对象的引用, 相当于指针吧. 基本类型都是传值的.
???
对象实例都是传值的,是传递一个对象引用还是传递一个对象引用的拷贝?
A(){
System.out.println("A constructor()");
}
}
class Test{
public static void main(String[] args){
A a,b;//声明两个句柄
a=new A();//指向一个对象
b=new A();//指向另外一个对象
System.out.println(a);
System.out.println(b);
System.out.println(a.equals(b));
System.out.println();
b=a;//复制句柄a,赋给句柄b,同时指向第一个对象.第二个对象将丢失句柄,不久后被垃圾收集器清除
System.out.println(a);
System.out.println(b);
System.out.println(a.equals(b));
}
}