谢谢合作:因为我们要讨论一些非常基础的问题。
比如这个问题:
public class Test {
public static void main(String[] args) {
for(int i=1;i<=4;i++){
try{
Class cls=Class.forName("Class"+i);
//如果类在包中,要改为 "package.Class"+i
java.lang.reflect.Method s=cls.getMethod("print",null);
s.invoke(cls,null);
System.out.println();
}
catch(Exception e){
e.printStackTrace();
}
}
}
}class Class1{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1="String1";
static String s2="String2";
}
final class Class2{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class2.s2;
static String s2="String2";
}final class Class3{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class3.s2;
final static String s2="String2";
}final class Class4{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class4.s2;
final static String s2=new String("String2");
}
你能解释结果吗?
比如这个问题:
public class Test {
public static void main(String[] args) {
for(int i=1;i<=4;i++){
try{
Class cls=Class.forName("Class"+i);
//如果类在包中,要改为 "package.Class"+i
java.lang.reflect.Method s=cls.getMethod("print",null);
s.invoke(cls,null);
System.out.println();
}
catch(Exception e){
e.printStackTrace();
}
}
}
}class Class1{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1="String1";
static String s2="String2";
}
final class Class2{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class2.s2;
static String s2="String2";
}final class Class3{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class3.s2;
final static String s2="String2";
}final class Class4{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class4.s2;
final static String s2=new String("String2");
}
你能解释结果吗?
解决方案 »
- 通过JAVA Runtime执行FTP登录命令,怎么总提示错误
- ***请教:如何接受类返回的java.util.List类型,先谢谢了!!***
- 基础问题
- list里的那个getselectitem的功能在jlist下怎么实现.
- java技术从入门到精通
- 线程相关问题,很迷惑................................
- 为什么J2SDK V1.4.2 装起来比较慢?而V.1.4.1特别快?
- 请问;如何用Applet做一个编辑器?
- 谁知道哪有Eclipse里的jface.jar下载
- 散分了.
- 请问vb.net中如何实现类似java中的读取properties文件的功能?
- 我的JSP页不能对数据库进行更新啊!!怎么办???
Sorry!我不是专家:~)
public class Test {
public static void main(String[] args) {
}
}class Class1{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1="String1";
static String s2="String2";
}
final class Class2{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class2.s2;
static String s2="String2";
}final class Class3{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class3.s2;
final static String s2="String2";
}final class Class4{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class4.s2;
final static String s2=new String("String2");
}
本来为了方便,采用反射,没想到更不方便,如果要循环100次就显示出方便了
当然这个题比较难,你没有必要能解释,但是至少要能看明白程序在干吗。
欢迎大家加入群众讨论.
public class Test {
public static void main(String[] args) {
Class1.print();
Class2.print();
Class3.print();
Class4.print();
}
}class Class1{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1="String1";
static String s2="String2";
}
final class Class2{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class2.s2;
static String s2="String2";
}final class Class3{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class3.s2;
final static String s2="String2";
}final class Class4{
static{
print();
}
public static void print(){
System.out.println("s1="+s1+"\t\t"+"s2="+s2);
}
static String s1=Class4.s2;
final static String s2=new String("String2");
}
yanjiqiang(爱你一千年)
我告诉你:如果你只是每天在CSDN上混,是没法提高的
先看一些基础的书籍才是正道。
推荐两本
<<Thinking in Java>>
<<effective java>>
如果要电子版,我有很多
发邮件到[email protected]
来者必回,你只要知名书名,我尽量找
4.6. 映射(Reflection) 下面 通过对加法运算的两种不同情况阐述映射的概念。 · 普通的32位加法,如果溢出了,怎么办?可不可以做64位加呢?既然是数,就能改,可以在运行过程中(动态)把一个32位数用一个PUSH语句入栈,再把另一个也压入栈中,这样32位加法运算转变为64位加法运算,问题解决了。同样的加、减、乘、除这四个运算,可以映射出不同的运算实现来,32位运算,64位运算是两种不同的实现,这种不同的实现就是对同一个描述的不同映射。 · 网络上的运算如何实现?同样还是加、减、乘、除运算,在网上,计算可以在本地进行,也可以在远程进行。比如说会做加法的进程在远程,这时本地进程将运算数据打包发给远程进程,远程进程计算后将结果打包送回。本地和远程,这是两种不同的实现方式,对于设计者来说,本地计算方式是用一段代码进行计算,远程计算方式是用一段代码与远程进行通信,但对于用户来说都是加法,除了时间上可能有差别外,其它完全一样,这是完全透明的网络运算。这就是映射。
C++中不存在真正的类,更不存在映射的概念。然而,类和映射的概念至关重要,要提到一个新的高度来认识。C++源程序编译后的目标代码是 .obj,而JAVA源程序编译后目标代码是 .class,JAVA想说明运算可以在运行中改,只有有了这个前提才能真正做到完全透明的网络运算。认识到这一点,举一反三,JAVA还能把32位加法动态提升为64位加法等等。如果把这种思想应用于软件设计,那么是不是能做到他人无法做到的事情呢? 映射(Reflection)这个概念怎么强调也不过分,它是程序设计的一个里程碑,从结构化设计到面向对象,有了多态这个概念,程序设计灵活了,现在又有了映射,程序设计更加灵活,人们走入了一个新境界。
另外在qq群:3785634 上面有一个j2ee的项目要做。有关网上购物的,为大家练练手。都是菜鸟,希望高手加盟指导,也希望菜鸟共同加盟学习。诚征项目带头人,只是要求肯帮助别人就可以。
难道我说邀请java菜鸟加入,虽然加入的不都是高手,但是只要有一定的基础
并且会在类成员变量赋值之前执行,但是如果成员变量加了final修饰
则先执行这个修饰赋值。另外成员类实例化动作必须出现在引用它之前,
否则引用不到。这些代码,很象孔乙己展示的茴字的四种写法。没什么意思,
不过估计楼主过SCJP等应该很轻松吧。
对于初学者而言,应该首先掌握最普通,最通用的东西,过分纠缠这些细节,估计最后自己找不着北了。
总之,语言是一种工具,我们掌握它是拿来解决问题的。而不是为了研究它本身的。
>书籍是最好的老师
>>没错!同意 but..
>要是自信,高手都喜欢称自己是菜鸟
>>某楼主就在说自己是菜鸟啊,看来他还是很有自信的嘛。。我不是菜鸟,但是是初学者 哈哈
看见帖子里面几为真正的高手在。。就跑来请教一番咯,
偶是软件专业的,现在在学j2se(以后才学J2ee和J2me)麻烦各位高手推荐几本书咯。
感激万分!
并且会在类成员变量赋值之前执行,但是如果成员变量加了final修饰
则先执行这个修饰赋值。另外成员类实例化动作必须出现在引用它之前,
否则引用不到。
以上看法不完全正确,他们是按文本顺序执行的。
class Test1{
public static int i=0;
static{ i=10;}
public static main(String[] args){System.out.println(i);}
}
class Test2{
static {i=10;}
public static int i=0;
public static main(String[] args){System.out.println(i);}
}
上面的结果可以说明这个
--------------------------------------------------------------------------同意。
print();
}请高手们解析一下这段代码.