??xml version="1.0" encoding="utf-8" standalone="yes"?> 当框架和监听器不写在同一个类的时候,会出现在监听器类中难以访问框架类中swinglg。目前我认ؓ是不同的实例化对象的lg也不同,所以要在监听器cM讉K框架cM的组Ӟ可用以下两种ҎQ?/p>
1Q利用组件的的setActionCommand和监听器cM的getActionCommandҎ来框架中的lg在监听器cM得以识别。但q种Ҏ有局限性?/p>
2Q利用监听器cM一个构造方法传递框架类?/p>
public MyActionListener(JFrame jframe){ q样Q在监听器类中可以像一般变量那栯用组件?/p>
java.awt.Graphics是绘制图形的重要cR它提供最底层的线Q圆和矩形等的绘制。绘制图形和填充囑Ş在坐标和像素的设|上是有个很的区别。绘制时Q实际所得的像素要比坐标从右边和下边多出一行,所以设|时坐标应该是这Pg.drawRect(0,0,size.width-1,size.height-1);填充Ӟ只在所l制的坐标冈Q所以直译时应该是这Pg.fillRect(0,0,size.width,size.height)。这L制和填充好的囑Ş才对。虽然现在还用不着q些技术,但是对于更深ȝ了解AWT和Swing提供了基?/p>
this.jFrame=jframe;
}
在Java中,我们比较两个对象时有两种ҎQ一U是直接使用逻辑q算W?=Pq有一U就是用equlas()函数Q该函数在Object中就定义了,所以每个类都会有这个函敎ͼ好了现在我们看看普通对象和字符串在使用q两U比较方式有什么不同,看下面代码,读者可以猜猜看l果是什么:
public class Equals {
/**
* @param args
*/
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
Object o3 = o1;
Object o4 = o2;
System.out.println( "o1.equals( o1 ): " + o1.equals( o1 ) );
System.out.println( "o1.equals( o2 ): " + o1.equals( o2 ) );
System.out.println( "o1.equals( o3 ): " + o1.equals( o3 ) );
System.out.println( "o1.equals( o4 )" + o1.equals( o4 ) );
System.out.println();
System.out.println( "o1 == o1: " + ( o1 == o1 ) );
System.out.println( "o1 == o2: " + ( o1 == o2 ) );
System.out.println( "o1 == o3: " + ( o1 == o3 ) );
System.out.println( "o1 == o4: " + ( o1 == o4 ) );
System.out.println();
String s1 = new String( "abc" );
String s2 = new String( "abc" );
String s3 = new String( "def" );
String s4 = s1;
String s5 = s2;
String s6 = s3;
System.out.println( "s1.equals( s1 ): " + s1.equals( s1 ) );
System.out.println( "s1.equals( s2 ): " + s1.equals( s2 ) );
System.out.println( "s1.equals( s3 ): " + s1.equals( s3 ) );
System.out.println( "s1.equals( s4 ): " + s1.equals( s4 ) );
System.out.println( "s1.equals( s5 ): " + s1.equals( s5 ) );
System.out.println( "s1.equals( s6 ): " + s1.equals( s6 ) );
System.out.println();
System.out.println( "s1 == s1: " + ( s1 == s1 ) );
System.out.println( "s1 == s2: " + ( s1 == s2 ) );
System.out.println( "s1 == s3: " + ( s1 == s3 ) );
System.out.println( "s1 == s4: " + ( s1 == s4 ) );
System.out.println( "s1 == s5: " + ( s1 == s5 ) );
System.out.println( "s1 == s6: " + ( s1 == s6 ) );
}
}
有没有答案了Q如果有了,看看你的{案正确吗,
o1.equals( o1 ): true
o1.equals( o2 ): false
o1.equals( o3 ): true
o1.equals( o4 )false
o1 == o1: true
o1 == o2: false
o1 == o3: true
o1 == o4: false
s1.equals( s1 ): true
s1.equals( s2 ): true
s1.equals( s3 ): false
s1.equals( s4 ): true
s1.equals( s5 ): true
s1.equals( s6 ): false
s1 == s1: true
s1 == s2: false
s1 == s3: false
s1 == s4: true
s1 == s5: false
s1 == s6: false
Z么会出现上面的结果呢Q其实在Java中,逻辑q算W?=号在比较对象的时候是严格的比较这两个对象是不是同一个对象,说白了,它比较的是两个对象在内存中的地址Q只有当两个变量指向同一个内存地址卛_一个对象时才返回trueQ否则返回falseQ所以就可以看到当我们用newҎ创徏了o1和o2׃分配了两个不同的内存I间Q所以它们在用逻辑q算W?=h判断两个对象是否相等时自然应该返回的是falseQ而在比较o1和o3Ӟ׃o3指向的实际是o1所指向的地址Q所以返回trueQ在字符串中逻辑q算W?=的作用和普通对象是一L?br />
那么对于o1和o2用equals()Ҏ比较q回的ؓ什么也是false呢,我们来看一D代码:
public boolean equals( Object o2 )
{
this == o2;
}
q是Object中equals()函数的实玎ͼ可以看到实际上它的功能还是比较两个对象的地址Q自然你现在可以推出Z么o1和o2比较时还是返回false了?br />
那现在问题可能来了,那ؓ什么s1和s2比较时返回的是true呢,他们在内存空间的地址可是不一L啊,呵呵Q其实这个理解v来更单了Q因为在StringcM重蝲了equals()函数Q它比较的是两个字W串的内容,而不是两个字W串对象在内存中的地址Q至于如何写q个函数我就不多说了Q大家可以自己写写看Q实现方式有多种Q不qSun公司当然只有那一U实现方式,哈哈
今天软gl于做出来了Q用JAR打包Q打了十几次都没打成功。在|上找了
一个多钟头才找C问题的所在,竟然是一个回车,以下是MANIFEST.MF文g的内
容:
Manifest-Version: 1.0
Created-By: 1.5.0_06 (Sun Microsystems Inc.)
Main-Class: StuLogon
在含有MainҎ的类StuLogon后边一定要加上回RQ让光标C一行。就q么?/p>
问题费了我一个钟头时间?/p>
标准输入输出
从键盘输入(读)到内存,再从内存输出Q写Q到昄?/p>
文g输入输出
从h输出Q写Q到文gQ再从文件输入(读)到内存,再从内存输出Q写Q到?/p>
C器
单的说JDK是面向开发h员用的SDKQ它提供了Java的开发环境和q行环境。SDK是Software Development Kit 一般指软g开发包Q可以包括函数库、编译程序等?br />
JDK是Java Development Kit
JRE是Java Runtime Enviroment是指Java的运行环境,是面向JavaE序的用者,而不是开发者?/p>
如果安装了JDKQ会发同你的电脑有两套JREQ一套位?/jre 另外一套位?C:/Program Files/Java/j2re1.4.1_01 目录下,后面q套比前面那套少了Server端的Java虚拟机,不过直接前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装q个位于 C:/Program Files/Jav a 目录下的JRE。如果你只安装JREQ而不是JDKQ那么只会在 C:/Program Files/Java 目录下安装唯一的一套JRE?
JRE的地位就象一台PCZP我们写好的Win32应用E序需要操作系l帮我们q行Q同LQ我们编写的JavaE序也必要JRE才能q行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JREQ那么你可以惌你的电脑有两台虚拟的Java PC机,都具有运行JavaE序的功能。所以我们可以说Q只要你的电脑安装了JREQ就可以正确q行Jav a应用E序?/p>
1、ؓ什么Sun要让JDK安装两套相同的JREQ这是因为JDK里面有很多用Java所~写的开发工P如javac.exe、jar.exe{)Q而且都放|在 /lib/tools.jar 里。从下面例子可以看出Q先tools.jar改名为tools1.jarQ然后运行javac.exeQ显C如下结果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main q个意思是_你输入javac.exe与输?java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main 是一LQ会得到相同的结果。从q里我们可以证明javac.exe只是一个包装器QWrapperQ,而制作的目的是ؓ了让开发者免于输入太长的指命。而且可以发现/lib目录下的E序都很,不大? 9KQ从q里我们可以得出一个结论。就是JDK里的工具几乎是用Java所~写Q所以也是Java应用E序Q因此要使用JDK所附的工具来开发JavaE序Q也必须要自行附一套JRE才行Q所以位于C:/Program Files/Java目录下的那套JRE是用来q行一般JavaE序用的?
2、如果一台电脑安装两套以上的JREQ谁来决定呢Q这个重大Q务就落在java.exew上。Java.exe的工作就是找到合适的JRE来运行JavaE序?Java.exe依照底下的顺序来查找JREQ自q目录下有没有JREQ父目录有没有JREQ查询注册表Q?[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment] 所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关pR?
3、介lJVM JRE目录下的Bin目录有两个目录:server与client。这是真正的jvm.dll所在?jvm.dll无法单独工作Q当jvm.dll启动后,会用explicit的方法(是使用Win32 API之中的LoadLibrary()与GetProcAddress()来蝲入辅助用的动态链接库Q,而这些辅助用的动态链接库Q?dllQ都必须位于jvm.dll所在目录的父目录之中。因此想使用哪个JVMQ只需要设|PATHQ指向JRE所在目录底下的jvm.dll?/p>