本文地址
分享提綱:
1. Java程序特點
1.1 基本語法
1.2 字符串
1.3 變量
1.4 Java數組
1.5 Java枚舉
1.6 Java修飾符
2. Java面向對象
2.1 Java類和對象
2.2 類的一些注意點
2.3 Java Number類
2.4 Java Character 類
2.5 Java String 類
2.6 Java StringBuffer 和 StringBuilder 類
2.7 Java 數組
3.參考文檔
本文主要介紹下Java程序的特點(不同於PHP的地方)和面向對象的一些特點
1. Java程序特點
【示例代碼】
1 public class HelloWorld { 2 /* 第一個Java程序 3 * 它將打印字符串 Hello World 4 */ 5 public static void main(String []args) { 6 System.out.println("Hello World"); // 打印 Hello World 7 } 8 }
執行過程如下(圖像演示):
C : > javac HelloWorld.java C : > java HelloWorld Hello World
1)【基本語法】
a)【大小寫敏感】
Java的類和函數是大小寫敏感的,這一點和PHP不同,PHP的類和函數的大小寫不敏感
b)【源文件名】
--【一個文件只能有一個類】源文件名必須和類名相同。當保存文件的時候,你應該使用類名作為文件名保存(切記Java是大小寫敏感的),文件名的後綴為.java。(如果文件名和類名不相同則會導致編譯錯誤)。
答案是否等的:
-- PHP沒有這樣的要求,因為PHP本身就是解釋型的語言,不需要編譯,也不需要生成編譯文件類似 .class的文件
c)【主方法入口】
--必須有main方法(靜態方法):所有的Java 程序由public static void main(String []args)方法開始執行。
--【也有例外】
java很多知識的,如果是單純的javaApplication(java應用程序)應該有main()函數作為入口,但是像jsp或者是applet等都是不需要main()函數的
d)【每個變量都要先定義,並制定類型】
-- 這也是與PHP語言的不同點
2)【字符串】
a)【必須用雙引號引著】
b) 【連接符】java中的字符串的鏈接符號是 "+", 不像PHP中是 ".",因為 "." 在Java中是 類中的變量的鏈接符。
3)【變量】
a)變量必須執行類型,且先定義
b)【種類】
--【概述】
Java有兩大數據類型,內置數據類型 和 引用數據類型
內置數據類型:
Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。 byte, short, int, long, float, double, boolean, char
引用數據類型:
--在Java中,引用類型的變量非常類似於C/C++的指針。引用類型指向一個對象,指向對象的變量是引用變量。這些變量在聲明時被指定為一個特定的類型,比如Employee、Pubby等。變量一旦聲明後,類型就不能被改變了。 -- 對象、數組都是引用數據類型。 --所有引用類型的默認值都是null。 -- 一個引用變量可以用來引用與任何與之兼容的類型。 -- 例子:Site site = new Site("Runoob")。
c)【常量】
-- 在 Java 中使用 final 關鍵字來修飾常量,聲明方式和變量類似
4)【Java數組】
a)數組是儲存在堆上的對象,可以保存多個同類型變量。
5)【Java枚舉】
a)Java 5.0引入了枚舉,枚舉限制變量只能是預先設定好的值。使用枚舉可以減少代碼中的bug。
b)【語法】
class FreshJuice { enum FreshJuiceSize{ SMALL, MEDUIM, LARGE } FreshJuiceSize size; }
6)【Java修飾符】
-- 訪問修飾符 分類如下
a) 默認的,也稱為 default,在同一包內可見,不使用任何修飾符。 b) 私有的,以 private 修飾符指定,在同一類內可見。 c) 共有的,以 public 修飾符指定,對所有類可見。 d) 受保護的,以 protected 修飾符指定,對同一包內的類和所有子類可見。
-- 非訪問修飾符:
a)【Synchronized 修飾符】: -- Synchronized 關鍵字聲明的方法同一時間只能被一個線程訪問。Synchronized 修飾符可以應用於四個訪問修飾符。 -- public synchronized void showDetails(){ ....... } b)【Transient 修飾符】: --序列化的對象包含被 transient 修飾的實例變量時,java 虛擬機(JVM)跳過該特定的變量。 --該修飾符包含在定義變量的語句中,用來預處理類和變量的數據類型。 -- 實例 public transient int limit = 55; // 不會持久化 public int b; // 持久化 c) 【Volatile修飾符】 --volatile 修飾的成員變量在每次被線程訪問時,都強制從共享內存中重新讀取該成員變量的值。而且,當成員變量發生變化時,會強制線程將變化值回寫到共享內存。這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。 -- 一個 volatile 對象引用可能是 null。 View Code
2. Java面向對象
【代碼示例】
該文件名為 TestJavaClass.java ,對應文件裡唯一的一個 public的類的類名。
實現的功能就是 示例化一個 狗的對象,同時設置狗的年齡並得到該年齡,然後輸出.
javac TestJavaClass.java
java TestJavaClass
1 //1. 入口測試類 2 public class TestJavaClass 3 {//{{{ 4 public static void main(String []args) 5 {//{{{ 6 //注意點1:實例化要制定類型 TestDog 7 //注意點2:java程序中的字符串必須是 雙引號引著 8 TestDog testDog = new TestDog("Tom"); 9 testDog.run(); 10 }//}}} 11 12 }//}}} 13 14 //2.測試小狗類 15 class TestDog 16 {//{{{ 17 String name; 18 int age; 19 //構造函數 20 public TestDog (String name) 21 {//{{{ 22 System.out.println("這條狗叫 " + name); 23 }//}}} 24 25 //運行 26 public void run() 27 {//{{{ 28 System.out.println("01 開始運行\n"); 29 //注意點3:類的內部調動函數,直接寫 setAge(dogAge) 30 setAge(10); 31 int dogAge = getAge(); 32 System.out.println("02 狗的年齡是 " + dogAge); 33 }//}}} 34 35 //獲取 36 public int getAge() 37 {//{{{ 38 return age; 39 }//}}} 40 41 //設置 42 public void setAge(int ageValue) 43 {//{{{ 44 //注意點4:類的內部調動類的成員變量,直接寫 age 45 age = ageValue; 46 }//}}} 47 48 }//}}} View Code
1)【Java的類和對象】
a)【調用函數和變量】
類內部調用函數,直接就是 函數名本身,直接寫 setAge(dogAge),變量也是直接寫 age
b)【類的修飾】
PHP中類的修飾,最多就是 抽象類為 abstract class ,但是在 Java中一個文件中必須有一個 public class,且為該文件的名。
c)【定義類的函數】
-- PHP中常見的是 public function functionName()
-- 在Java中,則不需要 fuction的說明,但是要執行返回值類型, public void functionName()
d)【構造方法】
--PHP中的構造方法是 public function __construct(){} ,且只能有一個
--Java的構造方法可以有多個,在創建一個對象的時候,至少要調用一個構造方法。構造方法的名稱必須與類同名,一個類可以有多個構造方法,從而實現不同情況下走不同的構造方法。
例如:
public class A{ public A(){ System.out.println("調用了A的無參構造函數"); } public A(String mess){ System.out.println("調用了A的有參的構造函數\n"+ "參數內容為:"+mess); } }
2)【類的一些注意點】
a)【import語句】
-- 【位置】如果源文件包含import語句,那麼應該放在package語句和類定義之間。如果沒有package語句,那麼import語句應該在源文件中最前面。
-- 【作用范圍】import語句和package語句對源文件中定義的所有類都有效。在同一源文件中,不能給不同的類不同的包聲明
3)【Java Number 類】
a)【產生原因】
在實際開發過程中,我們經常會遇到需要使用對象,而不是內置數據類型的情形。為了解決這個問題,Java 語言為每一個內置數據類型提供了對應的包裝類
b)【包裝類】
所有的包裝類(Integer、Long、Byte、Double、Float、Short)都是抽象類 Number 的子類。
c)【Number子類方法】
有 xxxValue(),compareTo() 等
4)【Java Character 類】
a)【單個字符】Character 類用於對單個字符進行操作。
b)【代碼示例】
// 原始字符 'a' 裝箱到 Character 對象 ch 中 Character ch = 'a'; // 原始字符 'x' 用 test 方法裝箱 // 返回拆箱的值到 'c' char c = test('x'); View Code
5)【Java String 類】
a)【創建字符串】
String 類有 11 種構造方法,這些方法提供不同的參數來初始化字符串,比如提供一個字符數組參數:
public class StringDemo{ public static void main(String args[]){ char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'}; String helloString = new String(helloArray); System.out.println( helloString ); } } StringDemo.java
b)【不可修改性】
String 類是不可改變的,所以你一旦創建了 String 對象,那它的值就無法改變了。
如果需要對字符串做很多修改,那麼應該選擇使用 StringBuffer & StringBuilder 類。
6)【Java StringBuffer 和 StringBuilder 類】
a)【可修改】相對String類的不可改變,當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。
b)【區別】
StringBuilder 類速度快,但是不是線程安全的
StringBuffer 類則是 線程安全的,一般建議使用 StringBuilder類,速度快
c)【代碼示例】
1 2 3 public class Test{ 4 public static void main(String args[]){ 5 StringBuffer sBuffer = new StringBuffer("菜鳥教程官網:"); 6 sBuffer.append("www"); 7 sBuffer.append(".runoob"); 8 sBuffer.append(".com"); 9 System.out.println(sBuffer); 10 } 11 } 12 StringBuffer
7)【Java 數組】
a)【定義】
-- Java 語言中提供的數組是用來存儲固定大小的同類型元素。
-- 相比而言PHP的數組就強大很多,大小不固定,類型也不限制
b)【聲明變量】
dataType[] arrayRefVar; // 首選的方法 或 dataType arrayRefVar[]; // 效果相同,但不是首選方法
c)【創建數組】
-- 方法1: Java語言使用new操作符來創建數組
arrayRefVar = new dataType[arraySize];
--方法2:直接創建
dataType[] arrayRefVar = {value0, value1, ..., valuek};
d)【多維數組】
--【定義】: 多維數組可以看成是數組的數組,比如二維數組就是一個特殊的一維數組,其每一個元素都是一個一維數組
--【動態初始化】:
1. 直接為每一維分配空間,如 int a[][] = new int[2][3];
2. 從最高維開始,分別為每一維分配空間
//二維數組動態初始化 String s[][] = new String[2][]; s[0] = new String[2]; s[1] = new String[3]; s[0][0] = new String("Good"); s[0][1] = new String("Luck"); s[1][0] = new String("to"); s[1][1] = new String("you"); s[1][2] = new String("!"); 二維數組動態初始化
c)【Arrays 類】
-- 【所屬包】java.util.Arrays 類能方便地操作數組,它提供的所有方法都是靜態的
-- 【常見方法】賦值(fill), 排序( sort), 比較(equals), 查找(binarySearch)