Java程序设计经典实验教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验教案(首页)
实验教案
实验教案
实验教案
s=new String(a);
System.out.println(s);
}
}
(4)查询资料列出Character类的常用方法并说明其作用。
(二)String、StringBuffer、StringBuilder常用方法
1. String 类
验证如下程序,并在实验报告写出运行结果并分析。
public class Main {
public static void main(String[] args) {
String str1 = "hello world";
String str2 = new String("hello world");
String str3 = "hello world";
String str4 = new String("hello world");
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str2==str4);
}
}
运行结果:
分析:在class文件中有一部分来存储编译期间生成的字面常量以及符号引用,这部分叫做class文件常量池,在运行期间对应着方法区的运行时常量池。
因此在上述代码中,String str1 = "hello world";和String str3 = "hello world"; 都在编译期间生成了字面常量和符号引用,运行期间字面常量"hello world"被存储在运行时常量池(当然只保存了一份)。
通过这种方式来将String对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。
总所周知,通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。
因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。
2. String和StringBuilder
验证如下程序,并在实验报告写出运行结果并分析。
代码1:
public class Main {
public static void main(String[] args) {
String string = "";
for(int i=0;i<10000;i++){
string += "hello";
}
}
}
结果分析:这句string += "hello";的过程相当于将原有的string变量指向的对象内容取出与"hello"作字符串相加操作再存进另一个新的String对象当中,再让string变量指向新生成的对象,即每次循环会new出一个String对象。
也就是说这个循环执行完毕new出了10000个对象,这样会造成巨大的内存资源浪费。
实际上,JVM会自动将string+="hello";优化成:
StringBuilder str = new StringBuilder(string);
str.append("hello");
str.toString();
代码2:
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<10000;i++){
stringBuilder.append("hello");
}
}
}
结果分析:这段代码new操作只进行了一次,也就是说只生成了一个对象,append操作是在原有对象的基础上进行的。
因此在循环了10000次之后,这段代码所占的资源要比上面小得多。
3. StringBuffer和StringBuilder
事实上,StringBuilder和StringBuffer类拥有的成员属性以及成员方法基本相同,区别是StringBuffer类的成员方法前面多了一个关键字:synchronized,这个关键字是在多线程访问时起到安全保护作用的,也就是说StringBuffer是线程安全的。
比较以下两个的insert方法:
StringBuilder的insert方法:
public StringBuilder insert(int index, char str[], int offset, int len)
{
super.insert(index, str, offset, len);
实验教案
}
(2)编写测试类,完成如下(1)中类方法的测试
2.继承的实现
(1)按如下类图编写代码
[参考代码]
class Person {
String id;
String name;
String age;
public void sleep() {
System.out.println("I am Person,I am sleeping");
}
public void eat() {
System.out.println("I am Person,I am eating");
}
}
class Student extends Person {
String sno;
public void study() {
System.out.println("I am Student,I am studying");
}
}
class Teacher extends Person {
String tid;
public void tech() {
System.out.println("I am Student,I am taching");
}
}
(2)编写测试类并创建main()方法,完成如下操作
A.分别创建Person、Student、Teacher对象,完成属性和每个方法的调用测试
B.在Student和Teacher中完成eat()方法的重写
C.编写类型转化示例(向上类型转化、向下类型转化)
3.多态现象
在完成(2)中Student、Teacher类eat()方法重载后,在测试类中编写如下代码并在main()方法中调用
static void askAllToEat(Person[] ps)
{
for(int i=0;i<ps.length;i++){
ps[i].eat();
ps[i].sleep();
}
}
从以上代码中体会多态现象。
4.抽象类的使用
编写以上类图所示类,并编写测试代码测试抽象类的使用
[参考代码]
abstract class Printer{
private String printerType;
Printer(String printerType){
this.printerType=printerType;
}
abstract void print(String txt);
void showMyType(){
System.out.println("My Type is:"+printerType);
}
}
class InkPrinter extends Printer{
InkPrinter(String inkPrinterType)
{
super(inkPrinterType);
}
void print(String txt)
{
System.out.println("I am Ink Printer");
System.out.println("Start to Print:"+txt);
}
}
class LasertPrinter extends Printer{
LasertPrinter(String laserPrinterType)
{
super(laserPrinterType);
}
void print(String txt)
{
System.out.println("I am Lasert Printer");
System.out.println("Start to Print:"+txt);
}
}
编写测试类及main() 方法,完成如下操作
A.创建Printer,InkPrinter,LaserPrinter类的对象。
B.设计并编写演示多态现象的代码
5.接口的使用
编写以上类图的代码,并编写测试类测试接口的使用
[参考代码]
interface IScan{
void scan();
}
实验教案
实验教案
实验教案
课题(项目)名称:窗口布局计划学时: 6 实验类型: 1.验证性或基础性□ 2.综合性□ 3.设计性□ 4.创新性和研究型□
授课日期: 年月日第周星期第节
实验目的
(l) 进一步了解和运用常用的 GUI 组件 ;
(2) 深入了解和运用 5 种常用的布局管理 :FlowLayout、BorderLayout、 CardLayout、GridLayout 和 GridBagLayout, 掌握 5 种布局管理的特点 , 并掌握一些常用组件容器的默认布局管理方式 :
(3) 比较常用的布局管理方式的不同和使用的条件。
实验要求
本实验的目的是让学生掌握窗口布局应用。
编写一个实现窗体布局的实例程序,编译运行结果。
实验内容与步骤
1.名片录入管理界面设计
设计一个简单的通用名片录入界面 , 名片的信息包括姓名、称谓、工作单位、工作地址、电话 1 、电话 2 、手机、传真、邮编等基本内容。
实验步骤 :
打开 Eclipse, 打开一个项目如 Chapter3, 在该项目下完成如下练习。
练习设计顺序排列的名片录入管理界面,本练习是考察用户对 FlowLayout 布局管理器的应用。
要求 : 在当前项目如 Chapter3下, 新建一个文件CardManager.java,将程序清单3-3中的程序输入并保存。
通过一个CardManager.java文件 , 实现一个简单的通用名片录入界面 , 名片的信息包括姓名、称谓 ( 可以包括总裁、总经理、经理、主任、处长、院长、校长、科长、教授、博士等 ) 、工作单位、工作地址、电话 1 、电话 2 、手机、传真、邮编等基本内容 , 用户选择确定按钮 , 表示输入 , 如果选择取消按钮 , 表示关闭窗口。
运行结果可以如图5所示。
观察运行结果 , 阅读和分析程序 CardManager.java,请将程序中代码1~代码7处补充完整。
图5
程序清单3-3 CardManager.java
import javax.swing.*;
import java.awt.*;。