static概念:
static它是靜態修飾符,一般用來修飾類中的成員。
當在定義類的時候,類中都會有相應的屬性和方法。而屬性和方法都是通過創建本類對象調用的。
static特點:
static是靜態修飾符,一般修飾成員。被static修飾的成員屬於類,不屬於單個這個類的某個對象。
static修飾的成員被多個對象共享。
static修飾的成員屬於類,但是會影響每一個對象。
被static修飾的成員又叫類成員,不叫對象的成員。
static修飾後成員的使用:
被static修飾的成員可以並且建議通過類名直接訪問。也可以通過某個對象訪到屬於類的靜態成員,原因即多個對象均屬於一個類,共享使用同一個靜態成員。
格式:
類名.靜態成員變量名
類名.靜態成員方法名(參數)
代碼演示:
class Demo{
//非靜態成員變量
public int num1 = 100;
//靜態成員變量
public static int num2 = 100;
//非靜態方法
public void method(){
System.out.println("靜態方法")
}
//靜態方法
public staic void method(){
System.out.println("靜態方法");
}
}
class test{
public staic void main(String[] args) {
System.out.println(Demo.num2);
Demo.method();
}
}
靜態代碼塊:
靜態代碼塊是定義在成員位置,使用static修飾的代碼塊。
特點:
在一同一個類中,它優先於主方法執行、優先於構造代碼塊執行,當以任意形式第一次使用到該類時執行。
該類不管創建多少對象,靜態代碼塊只執行一次。
可用於給靜態變量賦值,用來給類進行初始化。
public class Person {
private String name;
private int age;
//靜態代碼塊
static{
System.out.println("靜態代碼塊執行了");
}
}
final關鍵字:
關鍵字final,final的意思為最終,不可變。final是個修飾符,它可以用來修飾類,類的成員方法,以及變量(成員變量和局部變量)。
final的特點:
inal修飾類不可以被繼承,但是可以繼承其他類。
class Yy {}
final class Fue xtendsYy{} //可以繼承Yy 類
class Zi extends Fu{}
final修飾的方法不可以被覆蓋,但父類中沒有被final修飾方法,子類覆蓋後可以加final。
class Fu{
// final修飾的方法,不可以被覆蓋,但可以繼承使用
public final void method(){}
public void method2(){
}
class Zi extends Fu{
//重寫method2方法
public final void method2(){}
}
final修飾的變量稱為常量,這些變量只能賦值一次。
final int i = 20;
i=30; //賦值報錯,final修飾的變量只能賦值一次
引用類型的變量值為對象地址值,地址值不能更改,但是地址內的對象屬性值可以修改。
final person p = new Person();
Person p2 = new Person();
p=p2; //final修飾的變量p,所記錄的地址值不能改變
p.name = "小明";//可以更改p對象中name屬性值
p不能為別的對象,而p對象中的name或age屬性值可更改。
修飾成員變量,需要在創建對象前賦值,否則報錯。
也可以成員變量不賦值,但是構造方法必須賦值
class Demo{
//直接賦值
final int m = 100;
//final修飾的成員變量,需要在創建對象前賦值0,否則報錯。
final int n;
public Demo(){
//可以在創建對象時所調用的構造方法中,為變量n賦值
n = 2016;
}
}
包的概念:
java的包,其實就是我們電腦系統中的文件夾,包裡存放的是程序生成的.class文件。
類中聲明的包必須與實際class文件所在的文件夾情況相一致,即類聲明在a包下,則生成的.class文件必須在a文件夾下,否則,程序運行時會找不到類。
包的聲明格式:
package cn.itdemo; //包的聲明,必須在有效代碼的第一行
import java.util.Scanner;
import java.util.Random;
public class Demo {}
通常import導包
java四種訪問權限修飾符:
在Java中提供了四種訪問權限,使用不同的訪問權限時,被修飾的內容會有不同的訪問權限,以下表來說明不同權限的訪問能力:
歸納一下:在日常開發過程中,編寫的類、方法、成員變量的訪問
要想僅能在本類中訪問使用private修飾;
要想本包中的類都可以訪問不加修飾符即可;
要想本包中的類與其他包中的子類可以訪問使用protected修飾
要想所有包中的所有類都可以訪問使用public修飾。
注意:如果類用public修飾,則類名必須與文件名相同。一個文件中只能有一個public修飾的類。
內部類;
將類寫在其他類的內部,可以寫在其他類的成員位置和局部位置,這時寫在其他類內部的類就稱為內部類。其他類也稱為外部類。
內部類分為成員內部類與局部內部類。
成員內部類:
成員內部類,定義在外部類中的成員位置。與類中的成員變量相似,可通過外部類對象進行訪問
定義格式
class 外部類 {
修飾符 class 內部類 {
//其他代碼
}
}
訪問方式
外部類名.內部類名 變量名 = new 外部類名().new 內部類名();
成員內部類代碼演示
定義類
class Body {//外部類,身體
private boolean life= true; //生命狀態
public class Heart { //內部類,心臟
public void jump() {
System.out.println("心臟噗通噗通的跳")
System.out.println("生命狀態" + life); //訪問外部類成員變量
}
}
}
訪問內部類
public static void main(String[] args) {
//創建內部類對象
Body.Heart bh = new Body().new Heart();
//調用內部類中的方法
bh.jump();
}
匿名內部類:
定義的匿名內部類有兩個含義:
臨時定義某一指定類型的子類
定義後即刻創建剛剛定義的這個子類的對象
定義匿名內部類的作用與格式:
作用:匿名內部類是創建某個類型子類對象的快捷方式。
格式:
new 父類或接口(){
//進行方法重寫
};
代碼演示
匿名內部類如果不定義變量引用,則也是匿名對象。代碼如下:
new Myinter(){
public void show() {
System.out.println(「匿名內部類的show方法」);
}
}.show();
l 代碼演示
//已經存在的父類:
public abstract class Animal{
public abstract void eat();
}
//定義並創建該父類的子類對象,並用多態的方式賦值給父類引用變量
Animal aa = new Animal(){
public void eat() {
System.out.println(「我吃了」);
}
};
//調用eat方法
aa.eat();
使用匿名對象的方式,將定義子類與創建子類對象兩個步驟由一個格式一次完成,。雖然是兩個步驟,但是兩個步驟是連在一起完成的。
類作為方法參數和返回值:
public static usePerson(Person p){
p.eat();
p.speak();
}
public static getPerson(){
return new Person();
}
抽象類作為方法參數和返回值:
public static useAnimal(Animal a){
a.eat()
}
pubic static Animal getAnimal(){
return new Cat()
}
接口作為方法參數和返回值:
public static void useUSB(USB u){
u.open();
u.close()
}
public static USB getUSB(){
return new Mouse();