1. 程式人生 > >2017.06.06-日記-面向對象-this關鍵字及JAVA源文件結構

2017.06.06-日記-面向對象-this關鍵字及JAVA源文件結構

ret 實例 保存 傳參 導包 imp scan 創建 內存地址

這是今天的筆記,只是一些理論,後面有幾個練習一塊貼上來了,

this:當前類的對象引用
使用場合(都是類的內部):
1.獲取實例本身 public A getA(){return this}
2.獲取類的成員變量 this.屬性
3.獲取類的成員方法 this.方法名()
4.獲取類的構造方法 this()


JAVA中方法的傳參都是值傳遞,就是將數據復制一份放入方法形參
基本數據類型:將實參的值復制一份傳入形參
結果:對形參進行修改不會改變實參

引用數據類型:將引用類型的內存地址復制一份傳入形參
結果:
1.對形參修改會引發形參地址所指向的那個內存數據變化而引發實參變化 (內存地址不變化)
2.如果在傳入的方法內部對形參的地址進行修改,則形參的新地址指向的內存數據的變化和實參無關(內存地址變化)

JAVA源文件結構
1.包聲明--package xx.xx.;
2.導入聲明--import xx.xx.類名;
3.類聲明--public class 類名{}
4.屬性聲明--private 數據類型(基本類型and引用類型) 屬性名;
5.成員方法聲明--修飾符 返回值類型(基本,引用) 方法名(形參列表(形參數據類型1 形參名稱2,形參數據類型2 形參名稱2)..){}
6.構造方法聲明--修飾符 類名(形參列表){}

練習:

1.獲取用戶輸入的隨機兩個整數,並計算它們之間有多少個能被5整除的數的和並打印輸出.

解題思路:

  首先,獲取用戶輸入兩個數,

import java.util.Scanner;//導包

public class Demo1{

   public static void main(String[] args){

     //創建Scanner對象

     Scanner input = new Scanner(System.in);

     //提示輸入

     System.out.println("請輸入第一個整數:");

     int in1 = input.nextInt();//接收第一個數

     System.out.println("請輸入第二個整數:");

     int in2 = input.nextInt();//接收第二個數

     int sum = 0; //聲明一個變量sum用來存儲總和

     //for循環

     //三元運算符, i=輸入的最小值; i<=輸入最大值; i++

     for(int i = in1 < in2 ? in1 : in2; i <= in1 > in2 ? in1 : in2; i++){

       if(i % 5 ==0){

         sum += i;//循環累加

       }

     }

     System.out.println(in1 + "到" + in2 + "之間能被5整除的數的和為:" + sum);

   }

}

2.桌子分別是什麽價格?

一個家具店裏有三種桌子,價格如下:

a.他們的價格各不相同.

b.它們的單價加起來共4000元.

c.第二種桌子比第一種桌子便宜400元.

d.第三種桌子的單價是第二種的2倍.

那麽這三種桌子的單價分別是多少?

public class Demo03 {

  public static void main(String[] args) {

    //i為第一種桌子單價,j第二種,k第三種
    for (int i = 0; i <= 4000; i++) {
      int j = i - 400, k = j * 2;//j的價格比i便宜400,k的價格是j的2倍
      if (i + j + k == 4000) {//他們的總和是4000
        System.out.println("第一種桌子的單價是" + i + "元");
        System.out.println("第二種桌子的單價是" + j + "元");
        System.out.println("第三種桌子的單價是" + k + "元");
      }
    }
  }
}

此題解法有多種,也可以用三個for循環,比如下面的題:

3.我手裏有1元,2元,5元的人民幣共60張,總值是200元,並且1元面值的人民幣比2元的人民幣多4張,求三種面值人民幣各有多少張?

解法:三個for循環:

public class Demo02 {
  public static void main(String[] args) {

    //i,j,k分別為1,2,5元面值的張數;
    for (int i = 0; i <= 200 / 1; i++) {
      for (int j = 0; j <= 200 / 2; j++) {
        for (int k = 0; k <= 200 / 5; k++) {

          //i比j多4張,    三者之和為60張,    總面值為200;
          if ((i - j == 4 && i + j + k == 60) && i + j * 2 + 5 * k == 200) {
            System.out.println("1元的有" + i + "張");
            System.out.println("2元的有" + j + "張");
            System.out.println("5元的有" + k + "張");
          }
        }
      }
    }
  }
}

還有兩題是前兩天講的信息封裝和隱藏,代碼比較繁多,但難度不高,多寫一下就明白了;

public class Game {//創建game類
  private String name;// 名字//成員變量name,並且私有化

  //下面是封裝,就是 set意思是存值,可以理解為seve(保存)的首字母

  //       get意思是取值,可理解為get out(出去)的首字母,方便記憶

  public String getName() {
    return name;//取值將name返回
  }

  public void setName(String playName) {

    //存值,若要限制別人的輸入,可在這裏附加限制條件,這裏是如果設置的名稱(playName)的長度>=2並且<=8,那麽就將設置的名字(playName)賦給name屬性,就是可以正常輸出,否則將執行else代碼,將賦給一個默認值,這裏設置默認值為提示"角色名為2~8位字符"這樣當用戶輸入不合理的時候會進行提醒

    if (playName.length() >= 2 && playName.length() <= 8) {
      name = playName;
    } else {
      name = "角色名為2~8位字符";
    }
  }  

  public Game(){

    //記得類中添加一個無參構造方法,要不然使用的時候沒有就尷尬了- -!

  }

}

好了今天差不多就這些了.努力吧各位!

技術分享

2017.06.06-日記-面向對象-this關鍵字及JAVA源文件結構