A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 403383221 中级黑马   /  2012-11-15 21:01  /  2221 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class p {
        Strin  a ;
        a =new Strin();
}
Strin类已经建好了, 这样写不是等价于 Strin a  = new Strin();吗?为啥不加主函数会报错?直接写Strin a  = new Strin();又不会报错?


点评

把你的Strin贴出来吧  发表于 2012-11-15 22:35

14 个回复

倒序浏览
这是什么写法啊???  是
String
回复 使用道具 举报
你把a = new Strin();这句话放入一个方法中去,就不会有错了,你见过在类里面new出对象的吗?
回复 使用道具 举报
有Strin类。。。这问题感觉挺无聊的   同学问的    我不知道为啥才发这帖子的
回复 使用道具 举报
楼主是说笑话么,Strin是什么,你是想声明String 字符串么。 要是的话那就是String a="..";
回复 使用道具 举报
还真是这么回事。分开写,报语法错误,在编译期间就不会通过。在一个类中,有方法和属性,没见过 a=new A();类似的情况发生的。

Strin a  = new Strin();  这表示 a 是p类的一部分
后者的 Strin a;可以当做是属性的话,就要用方法给他初始化。像 a=new Strin();这种是不能存在的。
回复 使用道具 举报
本帖最后由 程宏志 于 2012-11-15 21:56 编辑

  Strin  a ;
  a =new Strin();
这样写当然会出错啊!
因为String a;这是建立一个引用对象;
而new String();是创建一个新的对象并不是指向上面的那个a的,这样的就是你建立了两个对象。
这里知识点,涉及到引用型数据在内存之中对象的建立的问题了!在这里,说明白一点,只要用到new关键字,就是创建一个新对象!

打个比方:int [] arr;
              arr=new int[];
同样这也是两个对象,并不是指向同一个arr的。
回复 使用道具 举报
Strin不是String类 ....是一个已经写好的类,他的想法是生成一个Strin类的对象昂。。。。
回复 使用道具 举报
类里的成员是变量、方法、构造方法、代码块。

Strin  a;//可以看做是变量

a  = new Strin();//是赋值语句,不能直接在类中出现,放在方法或者代码块里就可以了
回复 使用道具 举报
403383221 发表于 2012-11-15 21:49
Strin不是String类 ....是一个已经写好的类,他的想法是生成一个Strin类的对象昂。。。。  ...


你是说对象是吧,在java中数据类型分两种,一种是基本数据类型,一种是引用数据类型,基本数据类型只是在栈内存运行的,而引用数据类型就不同了,它是在堆和栈中运行的,它的引用对象是在栈里面,而实例对象确实在堆中的,两者之间的关系是通过地址值来联系的。同样类也是一种引用型数据。
  Strin a;这句话表明你在栈内存中建立了一个引用对象;
而 a=new Strin(),这句话表明,你在栈内存中建立了一个引用对象是a(这个a和上面的一个a是不同的),而new Strin()表面在堆内存中实例化了一个对象,然后通过地址值传给了a,这时因为在栈内存中有两个引用对象a,这时传地址值时会再栈内存中出现紊乱,因为两个同名,不知传给那一个,会造成错误。自然就会运行出错了

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王玮 中级黑马 2012-11-15 22:09:14
11#
程宏志 发表于 2012-11-15 21:45
Strin  a ;
  a =new Strin();
这样写当然会出错啊!

那程同学啊~第一,他说的是他自己定义的Strin类
第二,假如按String理解的话,String a 是声明String类型的引用,当new String()的时候才建立了String类型的对象,并且把 对内存地址赋给a。即不是两个对象。这是我的理解哈·--·
回复 使用道具 举报
陈莹 中级黑马 2012-11-15 22:12:37
12#
类中只能出现属性和方法吧,赋值语句执行在方法中.....
回复 使用道具 举报
陈莹 中级黑马 2012-11-15 22:12:45
13#
类中只能出现属性和方法吧,赋值语句执行在方法中.....
回复 使用道具 举报
iacky2 发表于 2012-11-15 22:09
那程同学啊~第一,他说的是他自己定义的Strin类
第二,假如按String理解的话,String a 是声明String类型 ...

引用数据在内存中,是先在栈内存中建立引用对象的,然后才会在堆内存中创建实例对象的,而不是先有实例而对象后有引用对象的,这个不要弄反了
回复 使用道具 举报
不知道能否贴出全代码?我测试的
Show s;s=new Show();
可以通过,不知道你的主函数里怎么写的。
  1. class Show
  2. {
  3.         public void show()
  4.         {
  5.                 System.out.println("Show time !");
  6.         }
  7. }

  8. class ExtendsTest
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 Show s;
  13.                 s=new Show();
  14.                 s.show();
  15.         }
  16. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马