【例3-1】自定义类BookDetails,创建并使用类BookDetails的三个对象
/****************************test_BookDetails.java***************************/
/*本程序的功能是定义一个图书类BookDetails,并声明一个具有三个元素的数组,数组中的每个元素都是BookDetails的对象,并输出三个BookDetails对象的具体信息。*/
import java.io.*;
public class test_BookDetails{
public static void main(String[] args) { //主类的main方法
//构造一个图书BookDetails数组,并给他赋三个图书BookDetails对象
BookDetails[] staff = new BookDetails[3];
staff[0] = new BookDetails("7-5084-1798-4", "软件工程","张海藩","清华大学出版社",34);
staff[1] = new BookDetails("7-5084-1798-7", "java程序设计语言","王海","西安电子出版社",27);
staff[2] = new BookDetails("7-5084-1798-4", "高等数学","李玉","高等教育出版社",29);
System.out.println("三个图书对象的输出信息如下:");
for (int i = 1; i < staff.length+1; i++) // 输出每本图书的信息
{ BookDetails e = staff[i-1]; //获取每个图书对象
System.out.println("第"+ i + "本图书的信息 :" + e.getIsbn() + " " + e.toString() + " "+ e.getPrice());
}
for (int i = 0; i < staff.length; i++) //修改图书对象的价格信息
{
staff[i].setPrice(staff[i].getPrice() + 5);
}
System.out.println("价格修改后的三个图书对象的输出信息如下:");
for (int i = 1; i < staff.length+1; i++)// 输出每本图书的信息
{
BookDetails e = staff[i-1]; //获取每个图书对象
System.out.println("第"+ i + "本图书的信息 :" + e.getIsbn() + " " + e.toString() + " "+ e.getPrice());
}
}
}
class BookDetails //图书类
{
private String isbn; // ISBN号
private String name; // 书名
private String authors; // 作者
private String publisher; // 出版信息,包括出版地点、出版社名、出版日期
private double price; // 定价
public BookDetails() { //无参的构造函数
}
public BookDetails(String Isbn, String Name, String Authors,String Publisher,double Price){ //带参的构造函数,完成每个对象的初始值的赋值
//super();
isbn = Isbn;
name = Name;
authors = Authors;
publisher = Publisher;
price = Price;
}
public String getIsbn(){ //返回图书的isbn
return isbn;
}
public void setIsbn(String Isbn) { //设置图书的isbn
isbn =Isbn;
}
public String getName() { //返回图书的名称
return name;
}
public void setName(String Name)
{ //设置图书的名称
name = Name;
}
public String getAuthors(){ //返回图书的作者名
return authors;
}
public void setAuthors(String Authors){ //设置图书的作者名
authors = Authors;
}
public String getPublisher(){ //返回图书的出版社
return publisher;
}
public void setPublisher(String Publisher){ //设置图书的出版社
publisher = Publisher;
}
public double getPrice(){ //返回图书的价格
return price;
}
public void setPrice(double Price) {//设置图书的价格
price = Price;
}
public String toString() { //返回图书的基本信息,如作者、出版社等
return name + " , " + authors + " , " + publisher;
}
}
/*--------------------------------------------------------------------------------------------------------*/
【例3-2】 简单数据类型与引用数据的区别。
/************************test_simpleRef.java*********************************/
class SimpleRefType{
float Value;
public void changeInt(int value) { // 修改值参数的方法
value = 34;
}
public void changeRef(SimpleRefType tt) { //修改引用参数的方法
tt.Value = 45.6f;
}
}
public class test_simpleRef {
public static void main(String[] args) {
int val ;
val =33;
System.out.println("val的初值为 :"+ val);
SimpleRefType tt =new SimpleRefType(); //创建SimpleRefType的对象
tt.changeInt(val); //修改值参数的方法调用
//值参数值的修改,没有影响值参数的值
System.out.println("调用方法changeInt()后val的初值为 :"+ val);
// 引用参数Value的调用
tt.Value=12.6f;
System.out.println("类的成员Value的初值为 :"+ tt.Value);
tt.changeRef(tt); // 引用类型的参数方法调用
// 引用参数值的修改,改变了引用参数的值
System.out.println("引用方法changeRef()调用后Value的值为 :"+ tt.Value);
}
}
/*----------------------------------------------------------------------------------------------------------*/
【例3-3】对象作为实参传递的实例。
/***********************test_parameter_object.java**************************/
import java.io.*;
import javax.swing.JOptionPane;
class BookInLibrary { //书库类
private String bookName; //书名
private String bookAuthor; //作者
private int bookPages; //书的页数
private boolean available; //可借的状态,为true则可借,反之不能借阅
BookInLibrary(String name,String author,int pages,boolean status){
bookName = name;
bookAuthor = author;
bookPages = pages;
available = status;
}
public void isAvailable(){ //判断图书是否可借的方法
if(available==true)
System.out.println("该图书可以借阅!");
else
System.out.println("该图书不可以借阅!");
}
public String toString(){ //输出图书基本信息的方法
return (bookName +" "+ bookAuthor + " "+String.valueOf(bookPages) +" "+ String.valueOf(available));
}
}
class Borrower{ //借阅者类
//Borrower的属性、构造函数在该例中忽略........
//Bookde 的对象book形参,使得每个借阅者调用该方法可查看图书的在库状态
public void getBookStatus(BookInLibrary book) {
book.isAvailable();
}
}
public class test_parameter_object{
public static void main(String[] args){
BookInLibrary objBook = new BookInLibrary("软件工程","张海藩",340,true);
System.out.println(objBook.toString());//输出图书的基本信息
// JOptionPane.showMessageDialog(null, objBook.toString(),"图书基本信息",JOptionPane.INFORMATION_MESSAGE);
//借阅者查看图书是否可以借阅
Borrower borrower = new Borrower(); //创建借阅人
//查看图书的状态,该方法接受Book的对象作为实参
borrower.getBookStatus(objBook);
}
}
【例3-4】 命令行参数使用的实例。
/**********************test_commandLine_arguments.java*********************/
class test_commandLine_arguments {
public static void main(String args[]{ //依次获取命令行参数并输出
for(int i=0;i<args.length;i++)
System.out.println("args["+i+"]: "+args[i]);
}
}
/*--------------------------------------------------------------------------------------------------------*/【例3-5】 静态方法访问成员变量的实例。
/********************************** test_accessStatic.java**********************************/
/*本程序的功能是测试静态的方法是否能访问非静态的数据成员和方法,实例方法对静态数据成员和方法的调用。*/
class test_accessStatic{
private static int count; //定义一个静态成员变量,用于统计对象的个数
private String name; //定义一个非静态的成员变量
public test_accessStatic(String Name){
name = Name;
count++;
}
//定义一个静态方法,测试静态的方法是否能够调用非静态的数据成员和方法
public static void accessStaticMethod(){
int i = 0; //正确,可以有自己的局部变量
count++; //正确,静态方法可以使用静态变量
anotherStaticMethod(); //正确,可以调用静态方法
name = “静态对象”; //错误,不能使用实例变量
resultMethod (); //错误,不能调用实例方法
}
public static void anotherStaticMethod() //类中另一个静态的方法
{
System.out.println("测试能被类中静态和非静态方法调用的静态方法");
count++;
}
//下面定义一个实例方法
public void resultMethod(){
anotherStaticMethod(); //正确,可以调用静态方法
System.out.println(“新建对象的信息” + name );
System.out.println(“新建对象个数” +count );/可正确调用静态的数据成员
}
public static void main(String args[]) {
test_accessStatic t1 = new test_accessStatic(“第一个对象”);
t1. accessStaticMethod();
test_accessStatic t2 = new test_accessStatic(“第二个对象”);
t2. accessStaticMethod();
}
}
/*------------------------------------------------------------------------------------------------------------------------*/