多种布局管理器例子
DMEO
DEMO2
DMEO3
金山词霸界面 DEMO
Qq聊天界面 DMEO
学生管理简单系统 JTable的使用 DEMO
学生管理简单系统 连接数据库 DEMO 数据库建立代码
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUI编程 (尚学版) DEMO
Component:所有可以显示出来的元素父类
两种常用的Container:
Window 其对象表示自由停泊的顶级窗口
Panel 其对象可作为容纳其它Component对象,但不能独立存在,必须被添加到其它Container中(如window或Applet)
pack();
Frame Frame高级
Panel Panel高级
TextField +Action DEMO DEMO2
DEMO3 "持有对方引用" "内部类"(这种方法最有用) [W1]
DEMO4
内部类给我们的最大的好处就是,能非常方便地访问到外部类的成员。
AWT 5种布局管理器:(见上)
事件监听 DEMO1 DEMO2
鼠标事件 DEMO DEMO2
f.repaint(); //重画
鼠标适配器 DEMO DEMO2
每个Compnent都有一个paint(Graphics g),
每次重画此Compnent时都自动调用paint()方法 DEMO
WIndow事件 DEMO (使用了匿名类)
键盘事件 DEMO
Netbeans提供一个布局管理器:LayoutManager接口
通过在容器上单击右键,然后选择弹出菜单中的“设置布局”
按产生事件的物理操作和GUI组件的表现效果进行分类:
MouseEvent
WindowEvent
ActionEvent
绘图操作:
Jpanel对象方法有一个方法paintComponent (Graphicx g) ,每当该组件中所包含的内容需要重新显示时,它会被自动调用
自动装箱的功能跟版本有关,是jdk1.5版本之后新增的功能。在 J2SE 5.0之后提供了自动装箱的功能,您可以直接使用以下语句来打包基本数据类型:Integer integer = 10;
integer与int不同,它是对象,用一个引用指向这个对象。正确的定义为Integer i = new Integer(n) //J2SE 5.0之前的做法
System.Exit(0) //程序正常退出,如果为其他错误退出的,就用其他参数,不用0,一般情况很少这种激烈手段
Math类的两个特别有用的常量:
Math.PI (大约为3.14159)
Math.E (大约为2.71828,自然对数的底)
对char执行算术运算: ‘c’-’a’ = 2
3%4 3.0%4.0
栈的“数据共享” --引用
栈的存取速度比堆要快
堆——用new建立,垃圾自动回收负责回收
缺点是:因为在运行时动态分配内存,所以内存的存取速度较慢。
实例化对象的两种方法
对于String这个类来说,它可以用两种方法来建立。
String s = new String("asdf");
和
String s = "asdf";
用这两个形式创建的对象是不同的,第一种是用new()来创建对象的,它是在堆上开辟空间,每调用一次都会在堆上创建一个新的对象。
而第二种的创建方法则是先在栈上创建一个String类的对象引用,然后再去查找栈中有没有存放asdf。如果没有,则将asdf存放进栈,并让str指向asdf;如果已有asdf ,则直接把str指向abc。
在比较两个String是否相等时,一定是用equals()方法,而当测试两个包装类的引用是否指向同一个对象时,应该用“= =”。
因此,可以通过“= =”判断是否相等来验证栈上面的数据共享的问题。
例1:
String s1 = "asdf";
String s2 = "asdf";
System.out.println(s1==s2);
该程序的运行结果是true,那么这说明s1和s2都是指向同一个对象的。
例2:
String s1 =new String ("asdf");
String s2 =new String ("asdf");
System.out.println(s1==s2);
该程序的运行结果是false,这说明用new的方式是生成的对象,每个对象都指向不同的地方。
常用格式控制字符:
/uxxx 以十六进制指定Unicode字符输出 /u0048
/xxx 以八进制指定Unicode字符输出
/b 倒退一个字符
/f 换页
/n 换行
/r 光标移到行首
/t Tab
在输出数值时,默认以十进制显示数值,下面使用java.lang.Ineger所提供的各种toxxx()方法来显示不同进制数值:
Integer.toBinaryString(19) //十进制19转为二进制
Integer.toHexString(19) //转为十六进制
Integer.toOctalString(19) //转为八进制
printf("...%s",...)
println(...) //直接写变量,因为之前已经定义了其变量的类型
常用格式转换字符:
%%
%d
%e, %E 将浮点数以十进制的方式输出,并使用科学记数法
%a, %A 使用科学记数法输出浮点数,以十六进制输出整数部分,以十进制指数部分
%o 八进制输出
%x, %X 十六进制输出
%s, %S 字样符
%c, %C 以字符方式输出,提供的数必须是Byte、Short、Integer、Character
%b, %B 将true或false输出,另外,非null值输出是true,null值输出是false
%t, %T 输出日期时间的前置。详情请查看JAVA API
要存取private成员,就要通过setXXX()与getXXX()等公开方法来进行设置或存取。
This可以引用另一个重载的构造函数 实例this(10); // 预设 10 个元素 另一对比实例
静态成员属于类,而不属于对象
当调用静态方法时,并不会传入对象的参考,即静态方法中不会有this参考名称,。由于没有this 参考名称 ,所以在参考方法中不允许使用非静态成员。
Main()方法就是静态方法,如果要直接在mian()中调用其他方法,则此方法必须是静态的。实例
可以使用static定义一个静态区块,就是类载入时的初始化动作。实例 实例
递归求解最大公因子 (辗转相除法)
递归的代码比较简单,但会有方法调用的负担,有时会比使用循环时效率低
JAVA SE6基本新功能:新增功能
isEmpty() 测试字符串是否为空
copyOf() 可直接返回一个新的数组对象
Java.io包 System类新增的console()方法来返回一个java.io.console对象,
使用console对象的readLine()方法可以直接读取命令行模式的用户文字输入,
使用readPassword()方法时,用户输入的文字将不会显示在画面中
实例1 实例2
对于File类新增了几个方法:
getTotalSpace()取得文件所在的磁盘驱动器之总容量
getUsableSpace()取得文件所在的磁盘驱动器之可用容量 实例
加入了系统工具栏图标的支持。
使用SystemTray类的isSupported()方法,测试目前的系统是否支持工具栏图标,如果支持可以使 用getSystemTray()取得SystemTray实例,使用add()加入TrayIcon实例。实例
如果想在系统工具栏图标上按右键时弹出窗口,可以指定一个PopupMenu实例给它。实例
Ant构建工具:
下载地址:http://ant.apache.org/
新建JAVA_HOME变量(JDK bin); 新建ANT_HOME变量(ant目录);新建path变量(ant bin)
Ant项目属性(Property) 任务目标(Target)
默认<project>的进入点为run任务,而run任务的完成依赖于compile任务的完成,compile任务的完成依赖于prepare任务的完成。所以在构建开始时,会先执行prepare任务,完成后再执行compile任务,最后执行run任务
实例(在编译前先建立所需要的目录,如果目录已经存在就自动路过这项工作,然后复制前一次编译的.class文件到bak目录。接下来进行纺译)
(在文字模式下直接执行ant 就可以开始构建项目,ant默认会读取同一目录下的build.xml。如果打算单独执行某个任务,则在执行ant指令时写出指定的任务名即可,ant compile)
任务(Task) |
|
属性(Property) |
属性都是由name/value组成 也可以设置一个.properties文件,之后在buildfile指定运行ant时加载它。方法如下: <property file="local.properties"/> 还有一些方法可以取得系统属性。例如下面的方式可以取得用户目录: <echo message="user.home = ${user.home}"/> |
路径(Path) |
使用Ant可以轻易地管理Classpath的设置问题 使用<path>来管理路径参考, 使用<pathelement>来指定目录或jar文件。例如: <path id="1"> <pathelement location="." /> <pathelement location="./lib/junit.jar" /> </path> 上面的例子也可以使用分号设置一系列位置: <pathelement location="/ ; ./lib/junit.jar" />
也可以使用<fileset>来指定某个目录下的文件。例如: <path id="2"> <fileset dir ="lib"> <include name="**/*.jar"> </fileset> </path> <include>或<exclude>用来包括或排除文件(或是可以使用includes、excludes属性设置),可以在上面使用* 表示零个或多个字符,?表示符合一个字符
|
常用任务(Task) |
提供<javac>或<junit>等任务时可直接使用<pathelement>标签来指定Classpath <target > <javac srcdir="./src" destdir="./classes"> <classpath > <pathelement location="." /> <pathelement location="./lib/junit.jar" /> </classpath> </javac > </target> 提供help信息 <target name="help" description="Type ant help for detail."> <echo message="Help information!!" /> <echo>Help!Help!</echo> <echo><![CDTAT[ Here is help info. Write you own information here. ]]></echo> </target> CDATA表示提供字符信息(Character Data),在![CDATA[ 与 ]] 之间的文字可以使用自由格式编写, 适用长信息文字显示 在执行ant时加上 -p 就会自动显示help这个target上的内容 Ant help 显示详细信息
文件的复制、建立与删除 在每一次构建程序前,会备份前一次的构建结果,可以使用<copy>标签来指定要复制的文件。例如: <target name="backup">
<copy todir="${backup.dir}"> <fileset dir="${classes.dir}" /> </copy> </target> 在构建程序时, 可以使用<mkdir>建立必要的目录。如: <target name="prepareDir" description="prepare necessary dirs"> <mkdir dir="${classes.dir}" /> </target>
编译程序 还可以在编译的时候,加入一些Classpath的指定,方便的功能 <target name="compile" description="compile the source files"> <javac srcdir="./dir" destdir="${classes.dir}"> <classpath> <fileset dir="${lib.dir}"> <include name="**/*.jar"> </fileset> </classpath> </javac> </target>
执行程序 <target name="run" depends="compile"> <java classname="onlyfun.caterpillar.HelloWorld"> <classpath path="${classes.dir}"/> </java> </target> 制作jar文件 可以将编译完的文件打包成 .jar 文件(Java Archive File),并可以指定MANIFEST文件。例如: <target name="jar"> <mkdir dir="${libDir}"/> <jar jarfile="${libDir}/${jarFile}" manifest="META-INF/MANIFEST.MF" basedir="${classes.dir}"/> </target> 如果提供有MANIFEST.MF文件,才需要设置manifest属性。为了完成jar打包的任务,可以在METS-INF 目录下提供一个MANIFEST.MF文件,例如: Manifest-Version: 1.0 Created-By: caterpillar Main-Class: onlyfun.caterpillar.HelloWorld Class-Path: HelloWorld.jar 制作war文件 对于网站应用程序的部署,可以使用<war>标签将所有相关的文件包装为war(Web Application Archive) 文件,例如: <target name="war"> <war destfile="dist/guestbook.war" webxml="src/webapp/WEB-INF/web.xml" /> <classes dir="target/classes" /> <lib file="beantools.jar /"> </target> Junit测试(见上的JAVA测试) |
内部类:(嵌套类
包含内部类的外部类 也叫宿主类
大部分时候,内部类都被作为成员内部类定义,而不是局部内部类,
成员内部类是一种与属性、方法、构造器和初始化块相似的类成员,局部内部类和匿名内部类则不是类成员
成员内部类 = 静态内部类 + 非静态内部类
内部类作为其外部类的成员,因此可以使用任意访问控制符如private、protected、public等修饰
内部类可以在方法里定义,但内部类不可以访问方法的局部变量,除非那个局部变量是final
如果外部类属性、内部类属性与内部类方法里的局部变量同名,则可通过this、外部类类名.this 作为限定来区分。 DEMO
内部类成员可以直接访问外部类的私有数据[X1] ,因为内部类被当成是外部类成员,同一个类的成员之间可以互相访问。
非静态内部类里可以直接访问外部类的private成员
但外部类不能访问内部类的实现细节,例如内部类的属性。
如果外部类需要访问非静态内部类成员,则必须显式创建非静态内部类对象来调用访问其实例成员,DEMO
匿名内部类适合使用一次的...
根据静态成员不能访问非静态成员的规则。
不允许在外部类的静态成员中直接使用非静态内部类。比如main方法里。
非静态内部类里不能有静态方法、静态属性、静态初始化块。
静态内部类:
静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
静态内部类里可以包含静态成员,也可以包含非静态成员
静态内部类不能访问外部类的实例成员,只能访问外部类的类成员 DEMO
外部类依然不能直接访问静态内部类成员,但可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可使用静态内部类的对象作为调用者来访问静态内部类的实例成员。DEMO
除此之外,还允许在接口里定义内部类,接口里定义的内部类默认使用public static修饰,也就是说,接口内部类只能 是静态内部类。但用处不大