一、面向對象1.1java鍵盤輸入 1.1.1這種方法我認為是最簡單,最強大的,就是用Scanner類import java.util.Scanner; public static void main(String [] args) { Scanner sc = new Scanner(Sys...
一、面向對象
1.1 java鍵盤輸入
1.1.1這種方法我認為是最簡單,最強大的,就是用Scanner類
import java.util.Scanner; public static void main(String [] args) { Scanner sc = new Scanner(System.in); System.out.println(“請輸入你的姓名:”); String name = sc.nextLine();//字元串輸入 System.out.println(“請輸入你的年齡:”); int age = sc.nextInt();//整型輸入 System.out.println(“請輸入你的工資:”); float salary = sc.nextFloat();//浮點型輸入 System.out.println(“你的信息如下:”); System.out.println(“姓名:”+name+“\n”+“年齡:”+age+“\n”+“工資:”+salary); }
這段代碼已經表明,Scanner類不管是對於字元串還是整型數據或者float類型的變數,只需做一點小小的改變,就能夠實現功能!無疑他是最強大的
1.1.2
while(a.hasNext()) { System.out.println("你輸入的是:"+a.nextInt()); } hasNext()是Scanner類的一個方法,判斷是否有輸入,有輸入項,a .hasNext()為true,沒有輸入項,a .hasNext()為false
1.2.數組
定義數組 int [][] a=new int [10][10];
1.3.java變數命名規則
1、 類名:每個單詞首字母大寫,例UserName
2、 方法名和變數名:第一個單詞首字母小寫,其他單詞首字母大寫
例:getInfor(),getInfor
註:類方法的第一個單詞必須是動詞
構造方法(用來完成對對象的初始化):名字必須與類的名字相同
3、 包名:全部小寫,例:example
4、 常量:所有字母全部大寫,如果多個單片語成,通常用_連接
例:MIN_VALUE,PI
1.4.Java記憶體解析
形參和局部變數在棧中分配記憶體空間 ,運行完自動釋放,堆中的記憶體程式員釋放,分析記憶體解析時,要從main()開始一步一步分析。在函數中定義的一些基本類型的變數和對象的引用變數都在函數的棧記憶體中分配。堆記憶體用來存放由new創建的對象和數組。 在堆中分配的記憶體,由Java虛擬機的自動垃圾回收器來管理。引用變數是普通變數,定義時在棧中分配記憶體,引用變數在程式運行到作用域外釋放。而數組&對象本身在堆中分配,即使程式運行到使用new產生數組和對象的語句所在地代碼塊之外,數組和對象本身占用的堆記憶體也不會被釋放,數組和對象在沒有引用變數指向它的時候,才變成垃圾,不能再被使用,但是仍然占著記憶體,在隨後的一個不確定的時間被垃圾回收器釋放掉。這個也是java比較占記憶體的主要原因,實際上,棧中的變數指向堆記憶體中的變數,這就是 Java 中的指針!
靜態變數(static)存放在數據區
new創造對象,會直接執行構造函數,
首先我們先來講解一下記憶體中的各個區域。
stack(棧):存放基本類型的數據和對象的引用,即存放變數。
如果存放的事基本類型的數據(非靜態變數),則直接將變數名和值存入stack中的記憶體中;
如果是引用類型,則將變數名存入棧,然後指向它new出的對象(存放在堆中)。
heap(堆):存放new產生的數據。
data segment:分為靜態域和常量域。
靜態域:
存放在對象中用static定義的靜態成員(即靜態變數,同理,如果該靜態變數是基本類型則將變數名和值存入靜態域,如果是引用類型則指向new出的對象)。
常量池:
常量池指的是在編譯期被確定,並被保存在已編譯的.class文件中的一些數據。除了包含代碼中所定義的各種基本類型(如int、long等等)和對象型 (如String及數組)的常量值(final)還包含一些以文本形式出現的符號引用,比如:類和介面的全限定名;欄位的名稱和描述符;方法和名稱和描述符。
註:大家要註意String類型不是基本數據類型,所以它可以創建對象,並且它的值是放在常量池中的。
1.5.Static
每new一個對象,成員變數都會賦予新的值,而static成員變數是唯一的,固定不變的,而且對所有成員共用,訪問的靜態變數占用統一塊記憶體。
1.6.包
包的命名 對於公司, com.company.lksk.sk
調用包 用inport 包名.* (調用包下的所有類)
或 import 包名.類名 (調用特定類)
調用時 調用的包必須與程式在相同目錄下,而且類必須是/com/company/lksk/sk/文件夾下 或者class文件的最上層包的父目錄(com文件的父目錄)位於classpath下
執行一個類,需要寫全包名,即java com.company.lksk.sk.Dog
在jdk中的jre/lib文件夾中rt.jar,包含java自帶的各種類,而Java.lang包中的類可以直接使用(包括System.class String.class等),不需要import,其餘均需要import
生成jar包,目錄調至class文件最上層包的父目錄,執行jar –cvf test.jar *.*(jar包的名字)
1.7. Java SE EE ME區別:
Java SE=Java Standard Edition
Java EE=Java Enterprise Edition
Java ME=Java Mobile Edition
SE(標準版)主要用於桌面程式,控制台開發(JFC)
EE(企業版)企業級開發(JSP,EJB):網站開發和基於 b/s模式的編程
ME(微縮版)嵌入式開發(手機,小家電):手機軟體游戲編程
1. Java SE(Java Platform,Standard Edition)。Java SE 以前稱為 J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的 Java 應用程式。Java SE 包含了支持 Java Web 服務開發的類,併為 Java Platform,Enterprise Edition(Java EE)提供基礎。
2. Java EE(Java Platform,Enterprise Edition)。這個版本以前稱為 J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程式。Java EE 是在 Java SE 的基礎上構建的,它提供 Web 服務、組件模型、管理和通信 API,可以用來實現企業級的面向服務體繫結構(service-oriented architecture,SOA)和 Web 2.0 應用程式。
3. Java ME(Java Platform,Micro Edition)。這個版本以前稱為 J2ME。Java ME 為在移動設備和嵌入式設備(比如手機、PDA、電視機頂盒和印表機)上運行的應用程式提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網路協議以及對可以動態下載的連網和離線應用程式的豐富支持。基於 Java ME 規範的應用程式只需編寫一次,就可以用於許多設備,而且可以利用每個設備的本機功能。
1.8.Java中random類的用法
1.8.1Random類 (java.util)
Random類中實現的隨機演算法是偽隨機,也就是有規則的隨機。在進行隨機時,隨機演算法的起源數字稱為種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。
相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。這點在生成多個隨機數字時需要特別註意。
Random類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中各方法生成的隨機數字都是均勻分佈的,也就是說區間內部的數字生成的幾率是均等的。下麵對這些方法做一下基本的介紹:
1.8.2、Random類中的常用方法
a、public boolean nextBoolean()
該方法的作用是生成一個隨機的boolean值,生成true和false的值幾率相等,也就是都是50%的幾率。
b、public double nextDouble()
該方法的作用是生成一個隨機的double值,數值介於[0,1.0)之間。
c、public int nextInt()
該方法的作用是生成一個隨機的int值,該值介於int的區間,也就是-231到231-1之間。
如果需要生成指定區間的int值,則需要進行一定的數學變換,具體可以參看下麵的使用示例中的代碼。
d、public int nextInt(int n)
該方法的作用是生成一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n。
如果想生成指定區間的int值,也需要進行一定的數學變換,具體可以參看下麵的使用示例中的代碼。
e、public void setSeed(long seed)
該方法的作用是重新設置Random對象中的種子數。設置完種子數以後的Random對象和相同種子數使用new關鍵字創建出的Random對象相同
方法舉例:
Random r = new Random();
生成[1,2.5)區間的小數:double d3 = r.nextDouble() * 1.5 + 1;
生成[-3,15)區間的整數:int n4 = r.nextInt(18) - 3;
1.9.多態
多態實際上就是就是,調用方法時,如果方法重寫了,實際當中調用哪個方法,要看你new的對象是什麼。
動態綁定是指在執行期間(而非編譯期間)判斷所引用對象的實際類型,根據實際類型調用其相應的方法。
多態的三個必要條件:1、要有繼承2、要有重寫3、父類引用指向子類對象。當三個條件滿足,調用父類中的重寫的方法時,實際上new的什麼對象,就調用該對象的方法。
1.10.abstract類/object類
abstrcat抽象方法是用來重寫的,本身只做定義,在子類中重寫,抽象方法必須位於抽象類中。抽象類必須被繼承,抽象類不能實例化;抽象方法必須被重寫,抽象方法只需聲明,不需實現。子類繼承抽象類時,必須重寫抽象類中的方法。
abstract class Animal(){ public abstract void enjoy(); }
object 類中的equals函數必須是指向同一引用時,才會返回true,所以一般要重寫equals函數。
1.11.final
final 的變數值不能改變,final的方法不能重寫,final的類不能繼承
1.12.介面
介面是抽象類和常量定義的集合,實際上介面是一種特殊的抽象類,這種抽象類只包含常量方法的定義,而沒有變數和方法的實現。介面方法的實現必須用class去implements
public interface Runner(){ public static final int id = 1; public void start(); public void run(); }
介面中聲明的屬性只能是public static final(不管你寫不寫),方法只能是抽象方法(不管你寫不寫),而且必須是public。
介面的實現用implements
例 interface Singer(){ Public void sing (); Public void sleep(): } class Student implements Singer{ }
類之間只能單繼承,一個子類只能繼承一個父類,而一個類可以實現多個無關的介面,且多個無關的類可以實現同一個介面。
例:class Teacher implements Singer,Painter(){}
class Teacher extends School implements Singer,Painter(){}
當介面繼承另一個介面時,實現介面的類,必須重寫兩個介面中所有的方法。