String类调用方法时为啥不用new对象
String类调用方法时为什么不用new对象
问题一:比如"abc".length直接就用了.
问题二:
在A类创建了一个C类的对象can 在B类创建了一个C类的对象can 他们是不是同一样? 他们都在堆内存的啊 另外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的实例对象的地址值。
------解决思路----------------------
二楼说的很清楚了,问题一我没去深究过;问题二来说,绝大多数情况下,不同的类里面创造同一个类的实例,他们都是不同的,起码地址不同。
B类调用A类的can对象来说,你可以把can对象设置成static的,这样可以通过这样调用了:A.can;
或者说你在A类设置一个方法,返回类型设置成C类型,这样你可以在B类通过实例化A类来调用这个得到can对象的方法;
------解决思路----------------------
"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的定义
}
------解决思路----------------------
在A类中保存C类的对象can的引用,如果你想直接修改can的年龄属性,那么年龄的访问修饰符应该是public的;不过一般我们将属性的访问修饰符设为private,可以为它添加set和get方法,修改和获得这个属性。
示例如下:
问题一:比如"abc".length直接就用了.
问题二:
在A类创建了一个C类的对象can 在B类创建了一个C类的对象can 他们是不是同一样? 他们都在堆内存的啊 另外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的实例对象的地址值。
------解决思路----------------------
二楼说的很清楚了,问题一我没去深究过;问题二来说,绝大多数情况下,不同的类里面创造同一个类的实例,他们都是不同的,起码地址不同。
B类调用A类的can对象来说,你可以把can对象设置成static的,这样可以通过这样调用了:A.can;
或者说你在A类设置一个方法,返回类型设置成C类型,这样你可以在B类通过实例化A类来调用这个得到can对象的方法;
------解决思路----------------------
"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的定义
}
------解决思路----------------------
在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);
}
}