2015年7月20日 星期一

JAVA SL-110_07/19

Java SL-110 2015/07/19
##########################################################################
JAVA 構成的要件分為幾項:屬性、方法、類別、建構子。
以下列程式為例:

public class Puggy{                     //類別
        String name = "小黑";           //物件變數
        static String type = "拉布拉多";//類別變數

        void skill(){                   //物件方法
                String s1 = "拿報紙";   //區域變數
                System.out.println(s1);
        }

        static void skill_1(){          //類別方法
                System.out.println("拎施鞋");
        }
        Puggy()[]                       //建構子
}

##########################################################################
註解:
1. //           單行註解
2. /*.....*/    多行註解
3. /**...*/     文件註解,編譯指令:javadoc -verbose -private O.java

##########################################################################
練習『文件註解』:Puppy.java

/**這是寵物的類別*/
public class Puppy{
        /**寵物的名稱*/
        public static String name = "小黃";
        /**寵物的品種*/
        public static String type = "拉布拉多";
        /**寵物的顏色*/
        public static String color = "黃色";
        /**寵物的技能*/
        public static void skill(){
                System.out.println("拿施鞋");
        }
}

cmd:
javadoc -verbose -private Puppy.java

點開 index.html 可以看到說明文件。
##########################################################################
// package 與 import

// package 程式,路徑 C:\java\water\Fish.java
package water;
public class Fish{
        public static String name = "小金";
        public static String type = "金魚";
        public static String color = "金";
        public static void skill(){
                System.out.println("吐泡泡");
        }
}

// 主程式,路徑 C:\java\PetStore.java
public class PetStore{
        public static void main(String args[]){
                String fishname = water.Fish.name;
                String fishtype = water.Fish.type;
                String fishcolor = water.Fish.color;
                System.out.println("我有一隻優雅的" + fishtype + "牠的名字叫" + fishname + ",牠身上的顏色是:" + fishcolor + "色");
                System.out.println("每當牠生氣的時候都會");
                water.Fish.skill();
        }
}

cmd:
javac PetStore.java
java PetStore

// 猜猜哪個 import 寫法,效能較快?
// 1.
import java.io.File;
File f;
f = new File("test.txt");

// 2.
import java.io.*;
import java.awt.*;
File f;
f = new File("test.txt");

// 3.
import java.io.*;
File f;
f = new File("test.txt");

// 4.
java.io.File f;
f = new java.io.File("test.txt");

// 答:以上四種的執行效能都一樣。
// 程式撰寫優先: package > import > classpath
##########################################################################
存取修飾元:

private         同一個 class 下才可進行存取。
default         同一個 package 下的 class 才可進行存取。
protected       不同 package 可以透過繼承。
public          皆可存取。

一般類別只有 public 和 default 兩種存取權限,『內部類別』才有四種存取權限。
##########################################################################
Java 命名規則:

1. 第一個字必須是英文字母、_ 或 $。
2. Java 有大小寫之分。
3. 不可以是關鍵字。

因此推薦使用駝峰式大小寫命名,例: AppStore
##########################################################################
資料型態        bytes   bit     範圍                            預設值
char            2       16      '1u0000'~'1uFFFF'(0~65535)      '1u0000'
byte            1       8       -128~127                        0
short           2       16      -32768~32762                    0
int             4       32      -2031次方~(2031次方-1)          0

char c = '中';          //可以
char c1= '1u4E2D';      //可以 Unicode 編碼
char c2= 65;            //可以 ASCII 編碼
char c3= '\0';          //可以 \0 為空字元
byte b = 255;           //不行,超出資料範圍
short a = 'A';          //可以,會轉換成數字
int a = '爪';           //可以,會轉成 ASCII 數字
int b = '哇';           //可以,會轉成 ASCII 數字
int c = a+b;            //可以,會轉成 ASCII 數字

// Java 預設值
整數    int
浮點數  double

資料型態        bytes   bit     範圍                            預設值
long            8       64      -2063次方~(2063次方-1)          0L
float           4       32      -3.4E+38~3.4E+38                0.0f
double          8       64      -1.7E+308~1.7E+308              0.0
boolean         1       8       true/false                      false

long l = 10;            //不行,因為 long 宣告要有 L
float f = 2.5;          //不行,因為 float 宣告要有 f
double d = 2.5f         //可以,因為 dobule 的資料範圍大於 float
boolean b = 0;          //不行,Java 的布林值只有 true / false
##########################################################################
資料態的轉換:

1. 小轉大:無風險,自動轉換


2. 大轉小:風險大,手動 coding
(欲轉換的型態)變數名稱;
(float)b;

// 判斷 compile 會不會過?
int i = 1;
double d;
d = i;
i = d;
//答:i=d; 會有問題,必須改成 i = (int)d;

// 判斷 compile 會不會過?
byte b=3;
short s=5;
short c=b+s;
//答:compile 會錯,因為整數預設為 int ,
//所以整數運算 short c=b+s; 必須改為 int c=b+s;
##########################################################################
陣列:
[]      >       指的是陣列中元素的位置或陣列物件的長度

int a[]=new int[5]{1,2,3,4,5];  \\這是錯誤的,已設有初值,不能再設長度。
int a[]=new int[]{1,2,3,4,5];

int B[]=new int[5];
B[0]=3;
B[1]=2;

//陣列取長度:
陣列變數.length         //陣列取長度是一種屬性。
字串變數.length();      //字串取長度是一個方法,後面有括號。

//比較 String 與 chat

                String                  char
資料型態        參考資料型態            基本資料型態
圈住符號        " "                     ' '
比較運算        == 或 equals()          ==
抽象表現        是一個 class            16-bit unicod

補充,參考資料型態有三種:String, Array, Object.
##########################################################################
算數運算子:

+       正加            //正或負為單元運算子
-       負減
*
/
%
++
...

//---------------------------
byte x=1, y=2, z;
z = x+y;
//這是錯的,要先相加再做轉換:z=(byte)(x+y);
//---------------------------
int a=0, b=0;
b = a++ + ++a - a++;
a= 3
b= 0
//Ans:b = 0(1) + 2(2) - 2(3)
//---------------------------
int a=0, b=0;
b= a-- + --a - a--;
a= -3
b= 0
//Ans:b = 0(-1) + -2(-2) - -2(-3)
##########################################################################
關系運算子:

>
<
>=
<=
==
!=

int a=1, b=2;
a==b    False
a>b     False
a<b     Ture
a>=b    False
a<=b    Ture
##########################################################################
邏輯運算子:                    短路 short-circuit
不論是 T 或 F 都會執行
&                               && 第一組邏輯是 F 時,就跳出
|                               || 第一組邏輯是 T 時,就跳出

int a=1, b=2;
(a<b) && (a>0);         T,T     Ture
(a<b) & (a>0);          T,T     Ture
(a>b) | (a<0);          F,F     False
(a>b) || (a<0);         F,F     False
!(a>b);                    F,NOT     Ture
(b>a) | (a<0);          T       Ture    | 後面不執行
(b>a) || (a<0);         T,F     Ture
(a<b) & (a<0);          T,F     False

//---------------------------
int a=1, b=2;
if((a<b) | (++a>0))
a=2
//---------------------------
int a=1, b=2;
if((a<b) || (a++>0))
a=1
##########################################################################
指定運算子:
=
+=
-=
*=
/=
%=
&=
//---------------------------
int a=2;
a=a*2-3;
a=1
//---------------------------
int a=2;
a*=2-3;
a=-2
//---------------------------
String s1="JAVA";
String s2="SCJP";
int i=1;
int j=2;
System.out.println(i+j);        //印出 3
System.out.println(s1+j);       //印出 JAVA2
//---------------------------
String s1="420";

s1+=42;
System.out.println(s1);         //印出 42042
//---------------------------
X = 5*3 < 20 & 3+7 > 9-1 || 20 >= 20 -30 && False
       T     &    T      ||   跳出
##########################################################################
流程控制:

條件式流程控制  if-else, switch-case
迴圈式          for, while, do-while, foreach
例外控制        try-catch-finally, throws
特定控制單元    break, continue, label
label 為流程控制記號,不能改變程式執行流程的順序。

//---------------------------
//if_else

int a=1;
if(a>0)
        System.out.println("A");
//      System.out.println("B");
else
        System.out.println("C");
        System.out.println("D");

輸出:
A
D
//---------------------------
//switch case

1. case 的比對不可以重複
2. switch(x)
        x 必須是 int 以下的值域和 String (int, char, byte, short)
3. default 關鍵字可以單獨存在
4. default 只能有一個

為何需要 break?
因為 case 不能改變程式執行的流程,它只是一個記號,所以需要 break 來改變目前流程>。

語法:
switch(x){
        case 1:
        ......
        break;
        case 2:
        ......
        break;
        default:
}
//---------------------------
//for

public class Fest{
        public static void main(String avgs[]){
                for(int i=1;i<=10;i++){
                        if(i==8)
                                break;
                        if(i%3==0)
                                continue;
                        System.out.println(i);
                }
        }
}

輸出:12457

沒有留言:

張貼留言