static: 成員修飾符 靜態的意思 修飾屬性和方法
修飾的屬性:靜態變量或者類變量 因為類變量是隨著類的加載而加載。
類加載優先於對象 類變量相對於實例變量
特點:
1.類變量被所有實例對象共享
2.訪問方式 類名.類變量 直接訪問。
修飾方法:靜態方法/類方法(實例方法)
訪問方式:類名.靜態方法
通過類.方法名調用能夠簡單 static修飾屬性或者方法 會一直無法釋放類變量 導致內存空間 被占用。
實例成員與靜態成員互訪:
靜態成員可以訪問靜態 不能訪問非靜態
非靜態可以訪問靜態和非靜態
靜態方法裡面不能存在對象實例。
靜態方法不會出現this super 關鍵字
靜態初始化語句:
static{
//執行語句
}
該語句用於給類初始化 優先於main方法執行。只執行一次。
final:最終的意思,修飾符;
修飾類:代表最終類,不能被繼承。
修飾方法:代表最終方法,不能被覆蓋/重寫
修飾變量:代表最終變量也就是常量值不能被改值。這種常量I可以在程序的任何位置被訪問;
eg: public static final double MY_PI = 3.14;
空final變量的初始值必須在構造器中指定
public static int couse;
public Student(){
couse = n;
}
抽象類:abstract
具體類:一種實體的抽象定義;
抽象類:一種類中的多種實體的抽象定義
抽象方法:沒有方法體 public abstract void method();
具體類 貓狗蛇鳥 都有吃的動作 吃的動作封裝到抽象類父類中;
而吃什麼封裝到子類中,子類繼承父類的抽象方法要重寫原方法改寫成具體方法。
特點:1.抽象方法一定在抽象類中
2.抽象類不能創建對象(不能實例化)
3.抽象類要有子類 子類要重寫抽象方法。
成員: 抽象方法 具體方法 屬性(類屬性和實例屬性) 構造器
abstract class Pet{
private String name;
private int age;
private double weight;
public Pet(String name,int age,double weight){
this.name = name;
this.age = age;
this.weight = weight;
}
//set/get
public double getWeight(){
return weight;
}
public String toString(){
return name +"..."+age+"...."+weight;
}
public abstract void eat();
}
class Bird extends Pet{
private String type;
public Bird(String name,int age,double weight,String type){
super(name,age,weight);
this.type = type;
}
public String toString(){
return super.toString()+"..."+type;
}
public void eat(){
System.out.println("eat....蟲子");
}
}
class Cat extends Pet{
private String color;
public Cat(String name,int age,double weight,String color){
super(name,age,weight);
this.color = color;
}
public String toString(){
return super.toString()+"..."+color;
}
public void eat(){
System.out.println("eat....魚");
}
}
class Dog extends Pet{
private int size;
public Dog(String name,int age,double weight,int size){
super(name,age,weight);
this.size = size;
}
public String toString(){
return super.toString()+"..."+ size;
}
public void eat(){
System.out.println("骨頭");
}
}
class TestPet{
public static void main(String[] args){
Cat c1 = new Cat("小黑",2,8,"黑色");
Cat c2 = new Cat("小白",3,3,"白色");
Dog d1 = new Dog("小花",4,9,10);
Dog d2 = new Dog("小黃",4,20,20);
Bird b1 = new Bird("小綠",1,2,"黃鹂");
Bird b2 = new Bird("小紅",1,5,"八哥");
Pet[] pet = {c1,c2,d1,d2,b1,b2};
// sort1(pet);
sort2(pet);
print(pet);
}
public static void print(Pet[] pet){
for(Pet p : pet)
System.out.println(p);
}
//冒泡排序 體重
public static void sort1(Pet[] pet){
for (int i = 0;i < pet.length-1 ;i++ ){
for (int j = 0;j < pet.length -1-i ;j++ ){
if (pet[j].getWeight() < pet[j+1].getWeight()){
Pet p1 = pet[j];
pet[j] = pet[j+1];
pet[j+1] = p1;
}
}
}
}
//選擇排序
public static void sort2(Pet[] pet){
for(int i = 0; i< pet.length; i++){
int minIndex = i;
for(int j = i+1; j< pet.length;j++){
if(pet[minIndex].getWeight() > pet[j].getWeight())
minIndex = j;
}
if(minIndex!=i){
Pet temp = pet[minIndex];
pet[minIndex] = pet[i];
pet[i] = temp;
}
}
}
}