JAVA----關鍵字用法
阿新 • • 發佈:2018-11-06
this
使用注意:
1.代表所屬函式的呼叫者物件。
2.如果存在同名的成員變數和區域性變數時,在方法內部預設是訪問區域性變數(java編譯器採用“就近原則”),但可以用this訪問成員變數。
3.在一個建構函式中可以訪問另一個建構函式,但是呼叫語句必須在該建構函式的第一個語句,另外這兩個函式之間不能互相呼叫。
4.如果在一個方法中訪問一個變數時,該變數只有成員變數時,java編譯器會在該變數前加this。
程式碼:
class People
{
int id;
String name;
int age;
public People (int id,String name, int age)
{
this(age);
this.id = id;
this.name = name;
}
public People(int age)
{
this.age = age;
}
public void compara(People p1){
if(this.age > p1.age)
System.out.println(this.name + " big");
else if(this.age < p1.age)
System.out.println(p1.name + " big");
else
System.out.println( "equals");
}
}
class Demo1
{
public static void main(String[] args)
{
People a = new People(11,"Tom",48);
People b = new People(12 ,"Marry",30);
a.compara(b);
}
}
static
static修飾成員變數:
訪問方式:
物件.屬性名 或 類名.屬性名((比較常用))
物件.函式名() 或 類名.函式名()((比較常用))
使用注意:
1.static 修飾成員變數時,該成員變數的資料屬於共享資料。
2.非靜態成員變數只能用物件訪問。
3.靜態函式能直接訪問靜態的成員,不能直接訪問非靜態成員,但如果靜態函式中存在物件,則可以訪問非靜態成員。
4.靜態函式不能含有this和super關鍵詞。
5.非靜態函式既能呼叫靜態成也能呼叫非靜態成員。
**靜態成員變數的資料優先於物件存在**。
class ArrayTool
{
public static String ToString(int[] arr)
{
String aa="";
for(int i=0; i<arr.length; i++)
{
if(i==0) aa+="["+arr[i];
else if(i==arr.length-1)
aa+= arr[i] +"]";
else
aa +=" "+ arr[i] + " ";
}
return aa;
}
public static void Sort(int[] arr)
{
int len=arr.length;
for(int i=0; i<len; i++)
{
for(int j= i+1; j<len-1; j++)
{
if(arr[i]>arr[j])
{
int temp;
temp= arr[i];
arr[i]= arr[j];
arr[j]=temp;
}
}
}
}
}
class Demo2
{
public static void main(String[] args)
{
int[] arr = {1, 6, 9, 3, 5};
ArrayTool.Sort(arr);
System.out.println("Array" + ArrayTool.ToString(arr)) ;
}
}
super
定義:
代表父類空間的引用;
作用:
1.子父類存在同名的成員時,在子類中預設是訪問子類的成員,但可以通過super訪問父類成員。
2. 建立子類物件時,預設會呼叫父類無參的構造方法,可以用super指向父類的構造方法。
注意事項:
1. 如果在子類的構造方法上沒有指定呼叫父類的構造方法時,java編譯器會在子類的構造方法上加上super。
2. super關鍵字呼叫父類的建構函式時,該語句必須是子類建構函式的第一個語句。
3. super 和 this 不能出現在同一個建構函式中。
final
作用:
final 關鍵字修飾一個基本型別變數時,該變數不能重新賦值,第一次的值為最終的。
fianl 關鍵字修飾一個引用型別變數時,該變數不能重新指向新的物件。
final 關鍵字修飾一個函式時,該函式不能被重寫。
fianl 關鍵字修飾一個類時,該類不能被繼承。
常量的修飾符一般為: public static final
常量一般全部用大寫字母表示,單詞之間用下劃線隔開
程式碼:
class Circle
{
double r;
final double pi = 4.0;
public Circle(double r)
{
this.r = r;
}
public void getArea()
{
System.out.println("圓形的面積" + r*r*pi);
}
}
class Demo1
{
public static void main(String[] args)
{
Circle c = new Circle(4.0);
c = new Circle(5.0);
c.getArea();
//test(c);
}
}
abstract
使用注意:
1.如果一個函式沒有方法體,該函式必須用abstract修飾。
2.如果一個類有抽象函式,那麼該類必須用abstract修飾。
3.如果一個非抽象的類繼承了抽象的類,那麼必須把抽象的方法全部實現。
4.抽象類不能建立物件。
5.抽象類可以存在非抽象方法和建構函式。
6.abstract不能與final ,static , private 一起修飾一個方法。
程式碼:
//用抽象類求矩形,圓形的面積和周長
abstract class MyShape
{
public abstract void getArea();
public abstract void getLength();
}
class Rect extends MyShape
{
double x,y;
public Rect(double x,double y)
{
this.x = x ;
this.y = y ;
}
public void getArea()
{
System.out.println("Rect " + x*y);
}
public void getLength()
{
System.out.println("Rect " + 2*(x+y));
}
}
class Circle extends MyShape
{
double r;
public static final double PI = 3.14;
public Circle(double r)
{
this.r = r;
}
public void getArea()
{
System.out.println("Circle " + r*r*PI);
}
public void getLength()
{
System.out.println("Circle " + 2*r*PI);
}
}
class Demo3
{
public static void main(String[] args)
{
Circle ss = new Circle(4.0);
ss.getArea();
ss.getLength();
Rect aa = new Rect(2,4);
aa.getArea();
aa.getLength();
}
}
instanceof
定義:
判斷一個物件是否屬於指定的型別
使用格式:
物件 instanceof 類別
使用前提:
判斷的物件於指定的型別必須要存在繼承或實現的關係
程式碼:
class Animal
{
String name;
public Animal(String name)
{
this.name = name;
}
}
class Dog extends Animal
{
public Dog(String name)
{
super(name);
}
public void bite()
{
System.out.println(name + "咬人");
}
}
class Mouse extends Animal
{
public Mouse(String name)
{
super(name);
}
public void dig()
{
System.out.println(name + "挖洞");
}
}
class Demo2
{
public static void main(String[] args)
{
Dog ss = new Dog("dddddd");
System.out.println("狗是狗類嗎"+ (ss instanceof Dog)); //true
Animal dd = new Animal("ffff");
System.out.println("動物是狗類嗎"+ (dd instanceof Dog)); //false
}
}