1.方法的重載(Overload)
方法的重載是指一個類中可以定義有相同的名字,但參數不同的多個方法。調用時,會根據不同的參數表選擇對應的方法。
例如:
void info(){ System.out.PRintln("My id is "+ id);}void info (String t){ System.out.println(t+" "+id+" "+age);}構造方法也可以構成重載,例如:Person(){ id = 0; age = 20;}Person(int i){ id = 0; age = i;}Person(int n,int i){ id = n; age = i;}2.this關鍵字
this:當一個對象創建后,java會給這個對象分配一個引用自身的指針,這個指針的名字就是this,只能在類中的非靜態方法中使用,方法中的某個形參名與當前對象某個成員有相同的名字,這時為了不至于混淆,你便需要明確是那個this關鍵字指明使用的成員。
(1).在類的方法定義中使用的this關鍵字代表使用該方法的對象的引用
(2).當必須指出當前使用方法的對象是誰時要使用this
(3).有時使用this可以處理方法中成員變量和參數重名的情況
(4).this可以看作是一個變量,它的值是當前對象的引用
(5).this所在的大框框為heap堆內存里的new出來的一個對象
例如:
public class Leaf { int i = 0; Leaf(int i) {this.i = i;} Leaf increament(){ i++; return this; } void print(){ System.out.println("i ="+i); } public static void main(String[] args){ Leaf leaf =new Leaf(100); leaf.increament().increament().print(); }}結果是:i=102
3.static關鍵字 1.在類中,用static聲明的成員變量為靜態成員變量,它為該類的公用變量,在第一次使用時被初始化,對于該類的所有對象來說,static成員變量只有一份。
2.用static聲明的方法為靜態方法,在調用該方法時,不會將對象的引用傳遞給它,即是沒有對象一樣可以用(Cat.靜態的方法,不用寫對象的名字),所以在static方法中不可以訪問非static的成員。因此靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變量和實例方法(就是不帶static的成員變量和成員成員方法),只能訪問所屬類的靜態成員變量和成員方法。
3.main函數其實也是所在類的一個方法,就比如一個類是test,那么該類的main其實就是test.main(String[]args),眾所周知如果一個方法不是靜態的,則要先實例化該類,比如要這樣 test t=new test();然后才能調用test.main();而這對于運行一個程序的主函數來說是不現實的,所以比如把main函數定義為static,使test.main()可以直接被調用。
4.靜態方法不再是針對某個對象調用,所以不能直接訪問非靜態成員。如果想訪問必須new個對象出來
5.可以通過對象引用或類名(不需要實例化)訪問靜態成員。main方法在執行時不需要new一個對象出來。
類名 . static變量名
類名 . static方法名
public class Cat { private static int sid = 0; private String name; int id; Cat(String name) { this.name = name; id = sid++; } public void info() { System.out.println("My name is " + name + " No." + id); } public static void main(String arg[]) { Cat.sid = 100; Cat mimi = new Cat("mimi"); mimi.sid = 2000; Cat pipi = new Cat("pipi"); mimi.info(); pipi.info(); }}結果為:
My name is mimi No.100
My name is pipi No.2000
如果去掉sid的static和Cat.sia = 100;
那么運行結果是:
My name is mimi No.0My name is pipiNo.0
此時sid在兩個new出來的對象里都有值,均為1,每次創建對象是,sid都會被重新賦值為0。
4.package和import語句 為便于管理大型軟件系統中數目眾多的類,解決類的名字沖突問題,Java引入(package)機制,提供類的多重類命名空間。
package pakg1[.pakg2[.pakg3…]];
一般為公司的域名反過來寫成package com. … . …; package語句作為Java源文件的第一條語句,指明該文件中定義的類所在的包。
Java編譯器把包對應于文件系統的目錄管理,package語句中,用“ .”來指明包的層次
例如:packagecom.sxt;
則該文件中所有的類位于./com/sxt目錄下
如果將一個類打包,則使用該類時必須使用該類的全名,例如com.sxt.Myclass,Java編譯器才能找到該類。 也可以使用import在文件的開頭引入要使用到的類。
例如import com.sxt.Myclass;
//可以引用Myclass類 importcom.sxt.*;
//sxt下的類都能引用 importjava.util;
//引入Java.util包中的所有類 可以不需要用import語句直接使用java.lang包中的類。
必須class文件的最上層包的父目錄位于classpath下,設置Classpath的目的,在于告訴Java執行環境,在哪些目錄下可以找到您所要執行的Java程序所需要的類或者包。
J2SDK中主要的包介紹
java.lang包含一些Java語言的核心類,如String,Math,Integer(整數),System和Thread(線程)
java.awt包含了構成抽象窗口工具集的多個類,這些類被用來構建和管理應用程序的圖形化用戶界面
java.net包含執行與網絡相關的操作的類
java.io包含能提供多種輸入輸出功能的類
java.util包含一些實用工具類,如定義系統特性,使用與日期日歷相關的函數
5.類的繼承
Java中使用extends關鍵字實現類的繼承機制,其語法規則為:
class [extends ]{……}
通過繼承,子類自動擁有了基類(superclass)的所有成員(成員變量和方法)
Java只支持單繼承,不允許多繼承:一個之類只能有有一個基類,一個基類可以派生出多個子類
public class Person { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age){ this.age = age; } public String getName(){ return name; } public int getAge(){ return age; }}public class Student extends Person{ private String school; public void setSchool(String school){ this.school = school; } public String getSchool(){ return school; }}public class Test { public static void main(String agrs[]){ Student student = new Student(); student.setAge(20); student.setName("coco"); student.setSchool("henan"); System.out.println(student.getAge()); System.out.println(student.getName()); System.out.println(student.getSchool()); }}結果為:20cocohenan
6.權限修飾符
Java權限修飾符public protected private置于類的成員之前,用來限定其他對象對該類對象成員的權限
對于class的權限修飾只可以用public和default。
public類可以在任意地方被訪問,default類只可以被同一包內部的類訪問。
繼承中的權限控制:
一個類能夠繼承另一個類中private的成員,因為他會繼承所有成員,但是它不能使用private成員
新聞熱點
疑難解答