1. 程式人生 > >JAVA實驗二類的建立及封裝

JAVA實驗二類的建立及封裝

實驗 二

實驗名稱:類的建立及封裝

實驗室名稱:902

實驗臺號:901

學生姓名:

專業班級:2014級2班

指導教師:

實驗日期: 2016-03-31

一、  實驗目的

1.掌握類的宣告和建立,掌握構造方法的定義和使用。
2.掌握成員變數和方法的定義和呼叫。
3.掌握物件的建立、例項或類成員變數和方法的引用。
4.掌握包的使用和匯入,掌握Import語句的使用。
5.掌握訪問許可權的作用範圍。

二、實驗儀器及環境:

    PC計算機;windows7作業系統、JDK1.6和Eclipse開發工具

三、實驗內容及結果

1.建立一個求立方體體積的類,類中有3個成員變數,共兩個功能方法,一個為setDemo(int x,int y,int z)給長寬高賦值,另一個為實現求體積的功能,編寫另外一個類,類中有主方法求給定長寬高的立方體的體積,結果顯示在螢幕上。將上題的方法setDemo改用建構函式實現初始化。

輸入:輸入資料有多組,每組3個數值,分別表示立方體的長寬高。

輸出:對應輸入數值所求得的體積。

原始碼:

Lifangti.java
packagecn.edu.nefu.zhihu;
 
public classLifangti {
    double length,whith,high;
    void setDemo(double a,double b,double c){
       length=a;
       whith=b;
       high=c;
    }
    double tiji(){
       return length*whith*high;
    }
}
 
 
test1.java
packagecn.edu.nefu.zhihu;
 
importjava.util.Scanner;
 
public class test{
 
   
    public static void main(String[] args) {
       double a,b,c;
       Lifangti lifang=new Lifangti();
       Scanner reader=new Scanner(System.in);
       while(reader.hasNextDouble()){
           a=reader.nextDouble();
           b=reader.nextDouble();
           c=reader.nextDouble();
           lifang.setDemo(a,b,c);
           System.out.println(lifang.tiji());
       }
    }
}


測試結果:

第一組:輸入:1 2 3 輸出:6

第二組:輸入:2 3 5 輸出:30

2.定義一個學生類(Student)及它的屬性和方法;定義主類和main(),在main()方法中建立學生物件,並通過物件呼叫它的方法setName(),getName(),輸出學生的名字name和年齡age。

輸出:按照要求輸出。

原始碼:

Student.java
packagecn.edu.nefu.zhihu;
 
public classStudent {
    String name;
    int age;
    void setName(String name){
       this.name=name;
    }
    String getName(){
       return name;
    }
    void setAge(int age){
       this.age=age;
    }
    int getAge(){
       return age;
    }
}
 
test1.java
packagecn.edu.nefu.zhihu;
 
public class test1{
 
    public static void main(String[] args) {
       Student s=new Student();
       s.setName("Pang Zhennan");
       s.setAge(19);
       System.out.println(s.getName());
       System.out.println(s.getAge());
    }
}
 

測試結果:輸出:Pang Zhennan 19

3. 定義類Point及它的屬性、方法和建構函式,定義主類和main(),在main()方法中建立兩個座標物件,,並通過物件呼叫getMiddle方法後得到一個新的點座標,呼叫show()顯示該物件的座標值。

原始碼:

Point.java
packagecn.edu.nefu.zhihu;
 
public class Point{
    double x,y;
    Point(double x,double y){
       this.x=x;
       this.y=y;
    }
    void getMiddle(double x1,double y1,doublex2,double y2){
       x=(x1+x2)/2;
       y=(y1+y2)/2;
    }
    void show(){
       System.out.println(x+" "+y);
    }
 
}
test2.java
packagecn.edu.nefu.zhihu;
 
public class test2{
 
    public static void main(String[] args) {
       Point p1,p2,p3;
       p1=new Point(0,0);
       p2=new Point(1,1);
       p3=new Point(0,0);
       p3.getMiddle(p1.x,p1.y,p2.x,p2.y);
       p3.show();
    }
}
 
另一種方法:
Point.java
packagecn.edu.nefu.zhihu;
 
public class Point{
    double x,y;
    Point(double x,double y){
       this.x=x;
       this.y=y;
    }
    Point getMiddle(double x1,double y1,doublex2,double y2){
       x1=(x1+x2)/2;
       y1=(y1+y2)/2;
       Point p=new Point(x1,y1);
       return p;
    }
    void show(){
       System.out.println(x+" "+y);
    }
 
}
 
test2.java
packagecn.edu.nefu.zhihu;
 
public class test2{
 
    public static void main(String[] args) {
       Point p1,p2,p3;
       p1=new Point(0,0);
       p2=new Point(1,1);
       p3=new Point(0,0);
       p3=p3.getMiddle(p1.x,p1.y,p2.x,p2.y);
       p3.show();
    }
}
 

測試結果:0.5 0.5

4.定義一個複數(z=x+iy)類Complex,及它的屬性、方法和建構函式;定義主類和main()方法,在main()方法中建立兩個複數類Complex物件,並通過複數類物件呼叫它們的屬性和方法,輸出方法執行結果。

輸出:兩個複數求和後所得到的複數。

原始碼:

Complex.java
package cn.edu.nefu.zhihu;
public class Complex {
  int x,y;
  Complex(){
  }
  Complex(int x,int y){
    this.x=x;
    this.y=y;
  }
  static Complex add(int x1, int y1, int x2, int y2){
    Complex c=new Complex();
    c.x=x1+x2;
    c.y=y1+y2;
    return c;
  }
  void show(){
    System.out.println("z="+x+"+i*"+y);
  }
}
 
Test4.java
package cn.edu.nefu.zhihu;
public class test4 {
  public static void main(String[] args) {
    Complex c1,c2;
    c1=new Complex(1,1);
    c2=new Complex(2,3);
    c1=Complex.add(c1.x, c1.y, c2.x, c2.y);
    c1.show();
  }
}

測試結果:z=3+i*4

5.編寫一個類Add,該類在tom.jiafei包中,該類完成的功能是可以計算等差數列的和,在另外一個類中使用import引入Add類,並建立Add類的物件,求出給定等差數列的和。(此題考察的是package和import語句的使用)

輸出:按照提前給定的陣列首項、公比和項數n求出數列的前n項和。

原始碼:

tom.jiafei.Add.java
package tom.jiafei;
 
public class Add {
  int a1,d,n;
  Add(){
  }
  public Add(int a1,int d,int n){
    this.a1=a1;
    this.d=d;
    this.n=n;
  }
  public long getSum(){
    return n*a1+(n-1)*n/2*d;
  }
}
Test5.java
package cn.edu.nefu.zhihu;
import tom.jiafei.Add;
public class test5 {
  public static void main(String[] args) {
    Add shulie=new Add(1,1,3);
    System.out.println(shulie.getSum());
  }
}
 

測試結果:6

6.編寫兩個類:A和B,A建立的物件可以計算兩個正整數的最大公約數,B建立的物件可以計算兩個數的最小公倍數。要求:B類中有一個成員變數是用A類宣告物件。

輸出:預先設定好的兩個數的最大公約數和最小公倍數。

原始碼:

A.java
package cn.edu.nefu.zhihu;
public class A {
  int a,b;
  A(){
  }
  A(int a,int b){
    this.a=a;
    this.b=b;
  }
  int gcd(int x,int y){
    if(y==0)
      return x;
    else return gcd(y,x%y);
  }
}
 
B.java
package cn.edu.nefu.zhihu;
public class B {
  A a=new A();
  B(){
  }
  int lcm(int x,int y){
    return x*y/a.gcd(x, y);
  }
}
 
test6.java
package cn.edu.nefu.zhihu;
public class test6 {
  public static void main(String[] args) {
    A a=new A(4,6);
    B b=new B();
    System.out.println(a.gcd(4, 6));
    System.out.println(b.lcm(4, 6));
  }
}
 

測試結果:2  12

7.構造一個類來描述螢幕上的一個點,該類的構成包括點的x和y兩個座標,以及一些對點進行的操作,包括:取得點的座標值,對點的座標進行賦值,編寫應用程式生成該類的物件並對其進行操作。

原始碼:

Point1.java
package cn.edu.nefu.zhihu;
 
public class Point1 {
  double x,y;
  Point1(){
   
  }
  Point1(double x,double y){
    this.x=x;
    this.y=y;
  }
  void setPoint(double x,double y){
    this.x=x;
    this.y=y;
  }
  void getPoint(){
    System.out.println(x+" "+y);
  }
  void down(){
    y=y-1;
  }
  void up(){
    y=y+1;
  }
}
testt3.java
package cn.edu.nefu.zhihu;
 
public class testt3 {
 
  public static void main(String[] args) {
    Point1 p=new Point1(2,3);
    p.setPoint(4, 5);
    p.down();
    p.getPoint();
    p.up();
    p.getPoint();
    p.up();
    p.getPoint();
  }
}

8.編寫實現:有一個三角形類Triangle,成員變數有底邊x和另一條邊y,和兩邊的夾角a(0<a<180),a為靜態成員,成員方法有兩個:求面積s(無引數)和修改角度(引數為角度)。

原始碼:

package cn.edu.nefu.zhihu;
 
public class Triangle {
  double x,y;
  static double a;
  double area(){
    return x*y*Math.sin(a);
  }
  void setA(double a){
    this.a=a;
  }
}


9.編寫實現: 建構函式為 Triangle(int xx,int yy,int aa) 引數分別為x,y,a賦值 在main方法中構造兩個物件,求出其面積,然後使用修改角度的方法,修改兩邊的夾角,再求出面積值。(提示:求高的方法 h=y*Math.sin(a) )

注意:構造方法用於對成員變數初始化,無引數的構造方法將成員變數初始化為0值

原始碼:

Test8.java
package cn.edu.nefu.zhihu;
 
public class test8 {
 
  public static void main(String[] args) {
    Triangle sjx1=new Triangle(2,4,3.14*30/180); //Math.sin(a)傳遞的引數為以弧度表示的角
    System.out.println(sjx1.area());
    Triangle sjx2=new Triangle(6,4,3.14*30/180);
    System.out.println(sjx2.area());
    sjx1.setA(3.14*90/180);
    System.out.println(sjx1.area());
    //System.out.println(Math.sin(1.28));
  }
}
 

10. 

定義一個類實現銀行帳戶的概念,包括的變數有"帳號"和"存款餘額",包括的方法有"存款"、"取款"和"查詢餘額"。定義主類,建立帳戶類的物件,並完成相應操作。

提示:關鍵程式碼如下:

public int getleftmoney(){
return leftmoney;
}
public void savemoney(double money){
leftmoney+=money;
}
public void getmoney(double money){
if(money<=leftmoney)
leftmoney-=money;
else
System.out.println("只能取:"+leftmoney);
}

bankaccount ba=new bankaccount(123456,1000);
ba.savemoney(2000);
System.out.println("存入2000元后餘額為:"+ba.getleftmoney());
ba.getmoney(1500);
System.out.println("1500元后餘額為:"+ba.getleftmoney());

程式碼實現:

Bankaccount.java
package cn.edu.nefu.zhihu;
public class Bankaccount {
	int sno;
	double leftmoney;
	Bankaccount(){
	}
	Bankaccount(int sno,double leftmoney){
		this.sno=sno;
		this.leftmoney=leftmoney;
	}
	public double getleftmoney(){
		return leftmoney;
	}
	public void savemoney(double money){
		leftmoney+=money;
	}
	public void getmoney(double money){
		if(money<=leftmoney)
		leftmoney-=money;
		else
		System.out.println("只能取:"+leftmoney);
	}
}
Test.java
package cn.edu.nefu.zhihu;
public class Test1 {
	public static void main(String[] args) {
		Bankaccount ba=new Bankaccount(123456,1000);
		ba.savemoney(2000);
		System.out.println("存入2000元后餘額為:"+ba.getleftmoney());
		ba.getmoney(1500);
		System.out.println("1500元后餘額為:"+ba.getleftmoney());
	}
}

四、實驗心得體會:

實驗心得和體會:

通過做實驗,我發現我對類的封裝還是理解的不夠透徹,有點時候會想錯,或者想不到更好的方法去封裝一個類,如在封裝一個點的類時,要想求得兩個點的中點座標,需要用一個成員方法來實現,而在呼叫時,要通過物件去呼叫。後來又想了想,也可以把該方法定義成靜態的,然後可以直接通過類名就可以去訪問了。

一些總結:

構造方法沒有返回引數,且名稱要和類名相同,在物件被建立時執行,被物件呼叫。

一個方法或一個塊內定義的變數不可以在方法外或塊外使用,這種變數稱為區域性變數。如果方法中的引數的名字和成員變數的名字相同,可以用this.關鍵字加以區分。

同名的不同方法共存的情況稱為方法的過載,可以根據方法引數個數和引數型別的不同加以區分。

類方法和例項方法的不同:類方法可以通過類名和物件名進行訪問,而例項方法只能通過物件名進行訪問。


五、指導教師意見及成績

相關推薦

JAVA實驗二類建立封裝

實驗 二 實驗名稱:類的建立及封裝 實驗室名稱:902 實驗臺號:901 學生姓名: 專業班級:2014級2班 指導教師: 實驗日期: 2016-03-31 一、  實驗目的 1.掌握類的宣告和建立,掌握構造方法的定義和使用。 2.掌握成員變數

JAVA File的建立相對路徑絕對路徑

File f = newFile("D:/test/mytest.txt");//當執行這句話後在記憶體的棧空間存在一個f的應用,在堆空間裡存在一個mytest.txt物件。注意 這個物件只含有檔案的屬性(如大小,是否可讀,修改時間等),不包含檔案的內容,所以length=

三、Java虛擬機器自動記憶體管理機制、物件建立記憶體分配

  1、物件是如何建立: 步驟:    (1)、虛擬機器遇到new <類名>的指令---->根據new的引數是否在常量池中定位一個類的符號引用    (2)、檢測該符號引用代表的類是否已經被載入、解析、和初始化。(如果沒有則

IDEA無法建立編譯java檔案

在某天完成Java作業後,不知道按了什麼(後來分析應該是誤刪了src下的out檔案,其是用於儲存,然後一直無法建立以及執行java檔案,想改變java檔案,其顯示“the file is only read". 然後後來發現其問題是出在這幾個方面: 1.src這個檔案不再是sourc

JAVA基礎(44)---區域性變數和成員變數的區別封裝

成員變數和區域性變數的區別                       

java字串建立常用方法

字串String(一個字元陣列,常量,不可變): 1. 建立並初始化字串:   1). 使用字串常量直接初始化 String s="hello!";   2). 使用構造方法建立並初始化     String();//初始化一個物件,表示空字元序列     String(valu

Java中帶包(建立引用)的類的編譯

Java中帶包(建立及引用)的類的編譯 Java中帶包(建立及引用)的類的編譯與除錯 java源程式的編譯大家都知道,也就是cmd中到原始檔所在目錄下javac **.java即可,當程式中有包宣告還能簡簡單單的直接javac **.java嗎?答案當然是no,下面舉個簡單的例子證明一下直接

JAVA基礎(45)---區域性變數和成員變數的區別封裝

成員變數和區域性變數的區別                                1、在類中的位置不同                                            

java與js物件的建立使用

java與js物件的建立與使用 我們知道類構造器是建立Java物件的途徑之一,通過new 關鍵字呼叫構造器完成物件的例項化,還能通過構造器對物件進行相應的初始化。一個類必須要有一個構造器的存在,如果沒有顯示宣告,那麼系統會預設創造一個無參構造器,在JDK的Object類原始

《瘋狂Java講義(第4版)》-----第16章【多執行緒】(執行緒的建立生命週期)

執行緒的獨立執行的,他並不知道程序是否還有其他執行緒存在 當作業系統建立一個程序時,必須為該程序分配獨立的記憶體空間,並分配大量的相關資源;但建立一個執行緒則簡單得多,因此使用多執行緒來實現併發比使用多程序實現併發的效能要高得多 多執行緒是非常有用的,一個瀏覽器必須能

Java單例模式建立單例模式的多執行緒問題 volatile synchronized 關鍵字

接下來,說說我對多執行緒中volitile 和 synchronized的理解 這兩個關鍵字都是java內建的用於實現執行緒同步的機制,其中: volitile用於修飾變數,用於同步主記憶體和執行緒儲存中的變數值,但是volitile使用應牢記 —— 只有在狀態真正獨立

Java.Web】Servlet —— Servlet容器的啟動Servlet建立初始化,容器預設的Servlet

Servlet容器 —— 以tomcat為例 在tomcat容器等級中,context容器直接管理servlet在容器中的包裝類Wrapper,所以Context容器如何執行將直接影響servlet的工作方式。 tomcat容器模型如下: 一個context對應一個web

java】xml檔案表建立讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫

    java一種簡單的解析xml方法是用DOM進行解析, dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的,dom4j用於處理xml是很常用的技術,本篇部落格介紹xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫。

Java反射專題學習-類的建立初步認識

  博主開始學習Java反射基礎系列,用於夯實基礎;今天學習類的建立以及Class Type和類的關係等等,內容比較簡單我就把知識點寫在了程式碼的註釋上,程式僅供參考; 總結一下要點: 1.Java中任何一個類都是Class類的例項物件 2.一個類只可能是一個Class類的

Java面向物件概述三大特徵(封裝,繼承和多型)

一、面向物件思想 Java是面向物件的高階語言,對於Java語言來說,萬事萬物皆物件! 它的基本思想是使用類,物件,繼承,封裝,訊息等基本概念進行程式設計。面向物件程式的最小單元是類,類代表了客觀世界中具有某一特徵的一類事物,封裝了這類事物所具有的屬性和行為。 所以,類定義=成員變數(屬性)+方法(行為

Java虛擬機器之物件的建立記憶體佈局

一、物件的建立 在語言層面上,物件的建立通常僅僅是一個new關鍵字而已,而當虛擬機器接收到一個new指令時,它會做如下的操作。 虛擬機器接收到一條new指令時,首先會去檢查這個指定的引數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是

Java基礎--基礎資料型別封裝資料型別

引用資料型別(封裝資料型別)--面向物件設計的資料型別---把成一類的方式存在,它們不能擴充套件,絕種的。沒有子類。 整型:Byte Short Integer Long 浮點型:Float Doub

JAVA第五週實驗(一).封裝一類三角形物件Triangle

實驗簡述: 1.封裝一類三角形物件Triangle,該類物件具有三條邊的屬性,具有初始化三角形的功能、修改邊長的功能、判斷三條邊能否構成三角形的功能、求周長的功能、求面積的功能。 測試函式原始碼: public class test1 { /** * @param

Java實現二叉樹建立便遍歷

/** * 二叉樹是資料元素間具有層次關係的非線性結構,而且二叉樹每個結點的兩個子樹有 * 左右之分。 * 對於給定的一棵二叉樹,其先序/中序/後序遍歷是唯一確定的,但給定一種遍歷,無法 * 確定一棵二叉樹。先序/後序反應父結點與孩子結點層次關係,中序反應兄弟結點間

微信公眾號開發---自定義選單的建立選單事件響應(java

微信5.0釋出 2013年8月5日,伴隨著微信5.0 iPhone版的釋出,公眾平臺也進行了重要的更新,主要包括: 1)運營主體為組織,可選擇成為服務號或者訂閱號; 2)服務號可以申請自定義選單; 3)使用QQ登入的公眾號,可以升級為郵箱登入;