java中只能通过对象来访问类的属性或者方法吗?

比如:class A{
int a;void a(){
a = 10;
}
}
以上代码中,没有new对象不是也成功的访问到a属性了吗?

你这个例子,只是对象自己内部调用,有一个隐含的自身应用对象“this”,相当于this.a=10.外部访问的话,静态的属性和方法不需要通过实例对象访问,直接用类名就行,如Math.random()。还有反射机制,虽然不用使用new关键字,但也要通过newInstance()等方法搞到类的实例。追问

也就是说,只要是外部访问,都必须让类先实例化才行,对吧?

追答

如果是静态的方法和属性,就不用实例化;非静态的,必须先实例化。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-04

按照上述写法其实只是在类中写了个方法将属性初始化了而已!

一般在一个类中写的属性都会写成是私有的属性,如:private int a;然后给其加上set和get方法,在类的外部通过这两个方法访问类的属性;

至于方法,在外部访问同样需要new对象来访问的;

//类A
public class A {
int a;
void a(){
a=10;
}
}

//在类B中访问类A的属性
public class B {
public void b(){
A aa = new A();
aa.a = 10;//若写成a=10;就会报错
aa.a();//同样写成a()也会出错
}
}

追问

也就是说,只要是外部访问,都必须让类先实例化才行,对吧?

本回答被网友采纳
第2个回答  2014-03-04
利用java的反射机制,可以不用new,一般属性要封装的,没有封装的属性,可以用对象.属性名,但经过封装的属性用对象.属性名则不行,须调用对用的getter方法
第3个回答  2014-03-04
不是的 你可以去看看相应的API文档 里面写的很清楚
相似回答