String类调用方法时为什么不用new对象

刀刀很高 2015-09-03 07:59:47
问题一:比如"abc".length直接就用了.

问题二:
在A类创建了一个C类的对象can  在B类创建了一个C类的对象can  他们是不是同一样? 他们都在堆内存的啊  另外B类想调用A创建的对象can怎么弄
...全文
440 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
0萌萌哒0 2015-09-05
  • 打赏
  • 举报
回复
引用 5 楼 u012462850 的回复:
[quote=引用 3 楼 mg2flyingff 的回复:] 第一个问题:“abc”会被认为是一个String类的对象。它存储的位置在java常量区,可以暂时理解为这么写就是new了一个String,实际上它和new有区别的(关于存储位置以及生成时机的区别)。 第二个问题:两次new从不会返回同一个对象。尽管它们可能内容一样且都在内存里,但是它们的位置不同,占用相互独立的空间。 访问对象的成员需要两个条件:1、持有对象的引用(即有一个引用(”等于")那个对象的变量);2:、该成员的访问性允许你访问。
说错了 我就是想说A创建了一个C类型 对象 can 比如他有一个年龄是10 ,我想 在A类获得 这个C类型对象can, 并且修改can的年龄为15 并且想调用他的打印年龄方法 不知怎么弄.[/quote] 在A类中保存C类的对象can的引用,如果你想直接修改can的年龄属性,那么年龄的访问修饰符应该是public的;不过一般我们将属性的访问修饰符设为private,可以为它添加set和get方法,修改和获得这个属性。 示例如下:

public class A{
	private C can;
	public A(int age) {
		can = new C(age);
	}
	public C getC(){
		return can;
	}
	public void change(){
		can.setAge(15);
		can.printAge();
	}
	public static void main(String[] args) {
		new A(10).change();
	}
}
class C{
	private int age;
	public C(int age) {
		this.age = age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void printAge() {
		System.out.println("AGE : " + age);
	}
}
wjxtju 2015-09-05
  • 打赏
  • 举报
回复
"abc".length() 这种调用跟java一个叫自动装箱的机制有关;abc直接被包装成对象了, A类里操作C can对象; 想操作对象,必然是通过方法,假如这个方法叫 method.你想叫method操作can,就一定需要method能看到can; 方式一;你把can当参数传递给了method,不管你哪里声明的can,只要能传; method(C can){ can.setAge(10);或者can.age=10;根据C的定义 } 方式二; can在你的成员变量里或者在A的外围类的成员变量里; class A{ C can=new C(); public method(){ can.setAge(10);//或can.age=10; } } class Outer{ C can=new C(); class A{ public method(){ can.setAge(10);//或can.age=10; } } } 方式三;can在你的method内部() method(){ C can=new C(); can.setAge(10);或者can.age=10;根据C的定义 }
刀刀很高 2015-09-05
  • 打赏
  • 举报
回复
引用 3 楼 mg2flyingff 的回复:
第一个问题:“abc”会被认为是一个String类的对象。它存储的位置在java常量区,可以暂时理解为这么写就是new了一个String,实际上它和new有区别的(关于存储位置以及生成时机的区别)。 第二个问题:两次new从不会返回同一个对象。尽管它们可能内容一样且都在内存里,但是它们的位置不同,占用相互独立的空间。 访问对象的成员需要两个条件:1、持有对象的引用(即有一个引用(”等于")那个对象的变量);2:、该成员的访问性允许你访问。
说错了 我就是想说A创建了一个C类型 对象 can 比如他有一个年龄是10 ,我想 在A类获得 这个C类型对象can, 并且修改can的年龄为15 并且想调用他的打印年龄方法 不知怎么弄.
刀刀很高 2015-09-05
  • 打赏
  • 举报
回复
引用 3 楼 mg2flyingff 的回复:
第一个问题:“abc”会被认为是一个String类的对象。它存储的位置在java常量区,可以暂时理解为这么写就是new了一个String,实际上它和new有区别的(关于存储位置以及生成时机的区别)。 第二个问题:两次new从不会返回同一个对象。尽管它们可能内容一样且都在内存里,但是它们的位置不同,占用相互独立的空间。 访问对象的成员需要两个条件:1、持有对象的引用(即有一个引用(”等于")那个对象的变量);2:、该成员的访问性允许你访问。
哦 那只好理解成 "abc"是创建了对象了. 我就是想说 B创建了一个对象 can 比如他有一个年龄是10 ,我想 在C类获得 这个对象can, 并且修改can的年龄为15 并且想调用他的打印年龄方法 不知怎么弄.
0萌萌哒0 2015-09-04
  • 打赏
  • 举报
回复
第一个问题:“abc”会被认为是一个String类的对象。它存储的位置在java常量区,可以暂时理解为这么写就是new了一个String,实际上它和new有区别的(关于存储位置以及生成时机的区别)。 第二个问题:两次new从不会返回同一个对象。尽管它们可能内容一样且都在内存里,但是它们的位置不同,占用相互独立的空间。 访问对象的成员需要两个条件:1、持有对象的引用(即有一个引用(”等于")那个对象的变量);2:、该成员的访问性允许你访问。
zeling1005 2015-09-03
  • 打赏
  • 举报
回复
二楼说的很清楚了,问题一我没去深究过;问题二来说,绝大多数情况下,不同的类里面创造同一个类的实例,他们都是不同的,起码地址不同。 B类调用A类的can对象来说,你可以把can对象设置成static的,这样可以通过这样调用了:A.can; 或者说你在A类设置一个方法,返回类型设置成C类型,这样你可以在B类通过实例化A类来调用这个得到can对象的方法;
  • 打赏
  • 举报
回复
问题一: "abc".length这样的模式是调用字符串"abc"的成员变量length,可惜String类中没有定义这个成员变量,你可以调用 "abc".length(),因为String类定义了一个方法length()。 问题二: 创建了一个类的对象,看怎么创建,一般情况下通过new会在堆空间开辟空间,A类中new一个,B类中new一个,这两个不是同一个对象实例。但是如果是单例模式或者枚举类,不通过new获得,对象会是同一个。 B类想调用A创建的对象can怎么弄 这个情况没说清楚不好回答,要看你的can是成员变量还是局部变量 要是成员变量 就要设置B能访问这个成员can,或者通过方法访问,要是局部变量,还是要有个成员变量,先把can的值赋给成员变量,在通过B访问这个成员变量,获取到can的实例对象的地址值。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧