Lesson3
包的概念:包與系統目錄層次相對應的,只是用反斜杆分割”/”.
Package bao
Public class test {
Public static void main(String [] args){
System.out.println(“fff”);
}
}
要求有一個包名的目錄
執行方式爲:java bao/test 或java bao.test
Javac –d . test.java 可以自動生成目錄.
Import ava.io.file
Import ava.io.*
導入其他類包,*是通配符,表示全部導入.
類的說明符 :
1. public
2. default(不加訪問說明符時)
類的其他修飾符:
1. final
2. abstract抽象類
3. 同一包中的類互相訪問,不用導入import,不通包必須導入.
Javac –d x.java
Javac –d y.java
如果編譯的時候要注意順序,如果x用到y,那麼就要先編譯y再編譯x
如果怕麻煩,那就用javac –d *.java來統配編譯
包外的類如果想被別的包訪問,必須聲明成public(公共的),這樣才能被別的包訪問.
4. final class 最終類,不能再派生子類,不能被繼承.
5. 方法的說明符:
Public 公共
Protected保護
Default 默認
Private 私有
方法的其他修飾符:
static 靜態的
final 最終不可改變
abstract抽象
native
synchronizde 同步方法
子類不想當抽象方法,就去實現父類的抽象方法,子類的實現的方法可以是空方法.
如果想設計一個類,找到這個類所有共性的,但是沒有辦法去了解這個類的個體裏的方法體是什麼樣的,那麼就可以設計成抽象類,比如做一個了人類,知道一些共性,但是無法瞭解每個人的名字和動作,就可以搞一個抽象的類,搞一些抽象的方法,然後通過子類繼承來實現這些類.
1. class HelloWorld{
public native void as();
static {
System.loadLibrary("aaaa");
}
public static void main(String [] args ){
new HelloWorld().as();
}
}
2.編譯
3.創建*.h 頭文件用javah命令
Javah – jni HelloWorld
4.寫方法#include<jni.h>
#include"HelloWorld"
#include<stdio.h>
JNIEXPORT void JNICALL
Java_HelloWorld_as(JNIEnv *, jobject);
{
printf("fsadfasd!/n");
return;
}
鬱悶了,機器沒有配c的環境,暈,再議~
垃圾回收問題:
在java.lang.Obiect有一個方法finalize,當垃圾回收器啓動的時候,改方法被調用.
在java.lang.System.gc這個方法是強制執行垃圾回收器.
當java感到內存不足的時候垃圾回收器才運行,所以可以用gc強制執行.
接口的運用:
Interface 接口的定義語句
接口實現用: implements
Interface Spotr{
Void run();
Void jump();
}
Class tim implements Spotr {
Void run(){
System.out.println(“aa”);
};
Void jump(){
System.out.println(“bb”);
};
Public static void main(String [] args){
Tim t=new tim();
t.run();
t.jump();
}
}
接口裏所有的方法都是public 和抽象的,所以要實現接口的方法體裏的方法時,方法必須爲public的.
要實現了接口後的類可以被實例化,那麼就要重寫接口裏的所有方法
接口中可以有數據成員,聲明爲:public static final
一個接口可以繼承另外一個接口
Java不容許類多繼承,但接口可以多繼承
實現接口人,和調用接口人,比如顯卡和主板之間的接口,有顯卡廠商去實現接口的功能,然後主板廠商調用接口的功能,其實調用的是實現類的功能.
|
接口定義一些方法,這些方法沒有方法體,方法體由實現的人來定義 |
實現接口的功能,就是實現接口的人來實現這個接口裏所有的方法的方法體 |
調用接口的方法體,直接調用的是接口類,而不是實現接口的類,就是上邊指向的這個類 |
實現 |
調用接口,不是調用實現 |
要調用接口:要把接口的實現傳給接口,然後在調用接口,用實現裏的方法.
接口 A 實現 B
C調用
B 實現 A
C調用 A{
Public void setcard(A a){ 實現接口調用
This.a=a
}
B b=new B();
Setcard(b); 將接口的實現傳給接口.
}
內部類
內部類可以訪問外部所有成員,外部類可以控制內部類的可見性.
內部類和外部類可以有一樣的方法名,因爲內部類也可以直接拿到外部去定義.
內部類編譯後的取名:
外部類名$內部類名.class
class outer{
class inner{
}
}
如果以類內部類被定義在一個方法裏,那麼這個內部類只能被這個方法來操作了.
通過outer.this.index來訪問外部類的成員變量.
其他的類訪問外部類的內部類,在外部類內定義方法:
Inner getinner(){
Return new Inner;
}
其他類調用:
Outer.Inner inner=new Outer.getinner();
inner.print();
其他類訪問內部類,先用外部類產生內部類對象,然後其他類纔可以調用內部類
Outer.Inner inner=Outer.new Inner();
靜態方法不能調用非靜態成員.
在一個方法中聲明一個類,那麼這個方法的參數和這個方法裏的成員變量都要聲明爲final.(是需要在內部訪問的時候才聲明爲final的).
這個爲類繼承帶內部類的方法,內部類用super實例化.
class car{
class lun{
void ce(){
System.out.println("aaaa");
}
}
}
class pp extends car.lun{
pp(car ca){
ca.super();爲了可以實例化內部類.
}
public static void main (String [] args){
car a=new car();
pp x=new pp(a);
x.ce();
}
}
內部類實現接口:
interface Animal{
void eat();
void sleep();
}
class Zoo {
class tiger implements Animal{
public void eat(){
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");
}
}
/*Animal getAnimal(){
return new tiger();//通過接口的實現去實現接口
}*/
Animal getAnimal(){
return new Animal(){//在這裏直接實現接口
public void eat(){
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");//這是匿名的內部類
}
};
}
}
class test{
public static void main(String [] args){
Zoo z=new Zoo();
Animal an=z.getAnimal();
an.eat();
an.sleep();
}
}
異常處理:
Try{異常代碼}catch(Exception e){捕獲後執行的代碼}finally{肯定會執行的代碼}
很簡單,好像沒有什麼可說的.
看一下api的異常.
程序編寫錯誤,水平問題,這類錯誤不需要捕獲的.