关于Thinking in Java 第二版练习题第5提!!!!!!!!100分!!!!!!! main是静态函数, 不用对象就调用的函数也就是静态函数了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为如果不是static方法,不能在未实例化类而使用该方法。所以,答案中使用了 E05_Storage st = new E05_Storage(); 来实例化类,生成对象st ,然后st就可以调用类里面的方法了。 如果不是static方法或者属性那么这些方法和属性是属于定义他们的类的根据类的定义,访问类的属性和方法必须通过类的实例来调用即st=new E05_Storage();这时可以访问st的属性和方法:st.s="1234";st.storage();等而根据static的感念,定义为static的属性和方法是独立于类的,所以可以直接调用如:sa="1234";storage(sa);这也就是为什么main方法需要定义为static一样。 在static方法中只能调用static方法。这里main是static方法,所以storage必须申明为static型的,才能在main中以StaticTest.storage()的形式调用否则,就得在main中先申明一个StaticTest型对象(比如是A),然后才能以A.storage()的形式调用 如果不是 static ,只是声明了方法,实际物理上还未建立,所以要 new 一次,产生一个对象才能调用。如果是 static ,就能直接调用了。所以, 或者 static 时直接调用,或者 无static时 new 一个再用。 正如楼上朋友说的这就是static的作用 static定义的是类成员,可以直接用类名调用,否则就一定要先创建这个类的实例对象才可以 还有一个问题为什么答案这样调用void print() { System.out.println("storage(s) = " + storage(s)); }然后public static void main(String[] args) { E05_Storage st = new E05_Storage(); st.print(); }这样可以打印出还差一点点转不过弯!!1 对于类E05_Storage来说,去掉static main方法,实际是这样的:public class E05_Storage { String s = "Hello, World!"; int storage(String s) { return s.length() * 2; } void print() { System.out.println("storage(s) = " + storage(s)); }},即这个类有一个属性字符串s一个方法为storage一个方法为print要注意的是,程序是从static void main方法开始执行的,不是先调用print方法。因此程序执行顺序是:1、在static void main()方法中实例化一个E05_Storage对象st即E05_Storage st = new E05_Storage();2、调用这个实例的print方法即st.print();于是就可以打印出来了。其实对类StaticTest来说,去掉static属性和方法,这个类是空的即class StaticTest {} 补充一下:一个类中非static属性和方法是可以相互调用的所以在print方法中可以调用storage方法和s属性 为什么不能直接调用storage方法? 可以啊可以这样写:public class E05_Storage { String s = "Hello, World!"; int storage(String s) { return s.length() * 2; } void print(int len) { System.out.println("storage(s) = " + len); } public static void main(String[] args) { E05_Storage st = new E05_Storage(); int a=st.storage(st.s); st.print(a); }}这时需要修改print方法,要加个参数,相比教要麻烦些或者public class E05_Storage { String s = "Hello, World!"; int storage(String s) { return s.length() * 2; } void print() { System.out.println("storage(s) = " + storage(s)); } public static void main(String[] args) { E05_Storage st = new E05_Storage(); System.out.println("storage(s) = " + st.storage(st.s)); }}结果是一样的,这时就不需要void print()方法了 在java中非静态类是可以调用静态类的对象,也可以调用非静态类的对象,而静态类则只能调用静态类中的对象,不能调用非静态类中的对象。 为什么获取额时间都和当前时间不一致呢 求教 ubuntu 下的scim 输入法问题 由细节走向完美(为中华之崛起而编程) 这道题的思路 这个 jar 问题, 你知道吗? 教教我 应用程序发布,而外的包怎么处理 很简单问题,答对都有分!!! Java8移除了JDBC-ODBC...以后要怎样读mdb文件? 兩維對象數組是Object嗎﹖ 什么是tts 新手,在线等。。。。。。。。。。。 一个奇怪的问题,希望各位高手能指点一二
如果不是static方法或者属性
那么这些方法和属性是属于定义他们的类的
根据类的定义,访问类的属性和方法必须通过类的实例来调用
即
st=new E05_Storage();
这时可以访问st的属性和方法:
st.s="1234";
st.storage();等而根据static的感念,定义为static的属性和方法是独立于类的,所以可以直接调用
如:
sa="1234";
storage(sa);这也就是为什么main方法需要定义为static一样。
这里main是static方法,所以storage必须申明为static型的,才能在main中以
StaticTest.storage()的形式调用
否则,就得在main中先申明一个StaticTest型对象(比如是A),然后才能以A.storage()的形式调用
这就是static的作用
void print() {
System.out.println("storage(s) = " + storage(s));
}然后public static void main(String[] args) {
E05_Storage st = new E05_Storage();
st.print();
}
这样可以打印出还差一点点转不过弯!!1
public class E05_Storage {
String s = "Hello, World!";
int storage(String s) {
return s.length() * 2;
}
void print() {
System.out.println("storage(s) = " + storage(s));
}
},
即这个类有
一个属性字符串s
一个方法为storage
一个方法为print要注意的是,程序是从static void main方法开始执行的,不是先调用print方法。
因此程序执行顺序是:
1、在static void main()方法中
实例化一个E05_Storage对象st
即
E05_Storage st = new E05_Storage();2、调用这个实例的print方法
即
st.print();
于是就可以打印出来了。其实对类StaticTest来说,去掉static属性和方法,这个类是空的
即
class StaticTest {
}
一个类中非static属性和方法是可以相互调用的
所以在print方法中可以调用
storage方法和s属性
可以这样写:
public class E05_Storage {
String s = "Hello, World!";
int storage(String s) {
return s.length() * 2;
}
void print(int len) {
System.out.println("storage(s) = " + len);
}
public static void main(String[] args) {
E05_Storage st = new E05_Storage();
int a=st.storage(st.s);
st.print(a);
}
}这时需要修改print方法,要加个参数,相比教要麻烦些或者
public class E05_Storage {
String s = "Hello, World!";
int storage(String s) {
return s.length() * 2;
}
void print() {
System.out.println("storage(s) = " + storage(s));
}
public static void main(String[] args) {
E05_Storage st = new E05_Storage();
System.out.println("storage(s) = " + st.storage(st.s));
}
}结果是一样的,这时就不需要void print()方法了