Java開發(fā)必備的三大修飾符
一、abstract 抽象的
抽象類:被abstract 修飾的類
語法: abstract class 類名{}
抽象方法 : 被abstract 修飾的方法
定義語法:
訪問修飾符 abstract 返回值類型 方法名(參數(shù)列表);
abstract 訪問修飾符 返回值類型 方法名(參數(shù)列表);
特點(diǎn):
1.當(dāng)一個(gè)類中存在抽象方法 那么這個(gè)類也必須是抽象的
2.一個(gè)抽象類中可以有抽象方法也可以有非抽象方法
3.如果一個(gè)類繼承了抽象類,這個(gè)類如果不想成為抽象類,那么這個(gè)類必須實(shí)現(xiàn)抽象類中的所有抽象方法
4.抽象類不能創(chuàng)建對(duì)象,但是可以聲明引用,抽象類的對(duì)象是存在的,是由子類創(chuàng)建子類對(duì)象時(shí)調(diào)用父類構(gòu)造方法創(chuàng)建的,是無法自己手動(dòng)去new 抽象類的對(duì)象的
抽象類的好處:強(qiáng)制使用多態(tài)
案例:
public class Demo{
public static void main(String[] args) {
}
}
abstract class Animal{
//抽象方法
public abstract void eat();
public abstract void sleep();
public void m1() {
System.out.println("m1");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃屎");
}
public void sleep(){
System.out.println("狗睡");
}
}
案例:
public class Demo{
public static void main(String[] args) {
Animal a = new Dog();
}
}
abstract class Animal{
public Animal() {
System.out.println("動(dòng)物類的構(gòu)造被調(diào)用 創(chuàng)建了 對(duì)象");
}
//抽象方法
abstract public void eat();
public abstract void sleep();
public void m1() {
System.out.println("m1");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃屎");
}
public void sleep(){
System.out.println("狗睡");
}
}
二、static 靜態(tài)的
static修飾成員變量:類變量 靜態(tài)變量 靜態(tài)屬性
定義語法:
訪問修飾符 static 數(shù)據(jù)類型 變量名 = 變量值;
static 訪問修飾符 數(shù)據(jù)類型 變量名 = 變量值;
訪問的方式(特點(diǎn))
1.類變量可以用 類名.屬性名 訪問
2.可以通過創(chuàng)建對(duì)象 用引用去訪問 (不推薦)
案例:
public class Demo{
public static void main(String[] args) {
Test t1 = new Test();
Test t2 = new Test();
t1.a++;
t1.b++;
System.out.println(t2.a);//10
System.out.println(t2.b);//21
}
}
class Test{
int a = 10;//實(shí)例變量
static int b = 20;//類變量
}
案例2:
public class Demo{
public static void main(String[] args) {
/*Test t1 = new Test();
Test t2 = new Test();
t1.a++;
t1.b++;
System.out.println(t2.a);
System.out.println(t2.b);*/
System.out.println(Test.b);//20
}
}
class Test{
int a = 10;//實(shí)例變量
static int b = 20;//類變量
}
static修飾成員方法: 靜態(tài)方法
語法:
訪問修飾符 static 返回值類型 方法名(形參列表){
方法的實(shí)現(xiàn);
}
static 訪問修飾符 返回值類型 方法名(形參列表){
方法的實(shí)現(xiàn);
}
特點(diǎn):
1.靜態(tài)的方法中 不可以直接訪問非靜態(tài)的成員(成員變量 和 成員方法)
2.如果要訪問非靜態(tài)的成員 必須創(chuàng)建對(duì)象 通過引用取訪問
3.靜態(tài)方法可以通過 類名.方法名() 訪問 也可以通過引用去訪問(不建議)
4.靜態(tài)的方法可以被繼承 靜態(tài)的方法不能被非靜態(tài)的方法所覆蓋 只能被靜態(tài)方法覆蓋 但是沒有多態(tài)(引用是什么類型 調(diào)用的方法就是這個(gè)類型中的方法)
5.在靜態(tài)方法中是不可以使用 this 和 super 關(guān)鍵字 因?yàn)?this 和 super都是和對(duì)象有關(guān)的 而靜態(tài)的成員和對(duì)象無關(guān) 先于對(duì)象存在
案例:關(guān)于靜態(tài)方法 訪問非靜態(tài)的成員
public class Demo{
public static void main(String[] args) {
/*Test t1 = new Test();
Test t2 = new Test();
t1.a++;
t1.b++;
System.out.println(t2.a);
System.out.println(t2.b);*/
//System.out.println(Test.b);//20
}
}
class Test{
int a = 10;//實(shí)例變量
static int b = 20;//類變量
//靜態(tài)方法
public static void m1() {
m2();
//System.out.println(a);
}
//成員方法
public void m2() {
}
}
案例:關(guān)于 靜態(tài)方法的使用 和 通過引用去訪問非靜態(tài)的成員
public class Demo{
public static void main(String[] args) {
//Test.m1();
Test t = new Test();
t.m1();
}
}
class Test{
int a = 10;//實(shí)例變量
static int b = 20;//類變量
//靜態(tài)方法
public static void m1() {
Test t = new Test();
System.out.println(t.a);
t.m2();
}
//成員方法
public void m2() {
System.out.println("m2");
}
}
案例:關(guān)于 靜態(tài)方法被繼承
public class Demo{
public static void main(String[] args) {
/*Dog d = new Dog();
d.eat();*/
Dog.eat();
}
}
//定義動(dòng)物類
class Animal{
public static void eat() {
System.out.println("動(dòng)物吃");
}
}
class Dog extends Animal{
}
案例:關(guān)于 靜態(tài)方法中是否能使用 this 和 super
public class Demo{
public static void main(String[] args) {
/*Dog d = new Dog();
d.eat();*/
//Dog.eat();
/*Animal a = new Dog();
a.eat();*/
Dog.eat();
}
}
//定義動(dòng)物類
class Animal{
String sex = "狗妖";
public static void eat() {
System.out.println("動(dòng)物吃");
}
}
class Dog extends Animal{
/*static String name = "金毛";
static int age = 3;*/
String sex = "母";//成員變量
public static void eat() {
String sex = "公"; //局部變量
System.out.println(super.sex);
/*System.out.println(name);
System.out.println(age);
System.out.println("狗吃");*/
}
}
初始代碼塊:定義在類中 方法外 用于在創(chuàng)建對(duì)象時(shí) 和 成員變量 按照從上向下的順序執(zhí)行初始化的操作 也叫做 動(dòng)態(tài)代碼塊
語法:
{初始化代碼塊 }
案例:
public class Demo{
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.a);
System.out.println(t.b);
System.out.println(t.c);
}
}
class Test{
int a = 10;
int c;
int b;
{//初始化屬性的
c = 30;
b = 20;
}
}
static 修飾初始化代碼塊:靜態(tài)代碼塊
靜態(tài)代碼塊的作用:在類加載時(shí) 和靜態(tài)的屬性 按照順序執(zhí)行 為類進(jìn)行初始化操作
語法:
static{
}
案例:
public class Demo{
public static void main(String[] args) {
System.out.println(Test.a);
System.out.println(Test.b);
}
}
class Test{
static int a = 20;
static{
b = 40;
}
static int b;
}
注意:靜態(tài)變量 時(shí)有默認(rèn)值 先進(jìn)行賦默認(rèn)值 再初始化
==================================================================
類加載:當(dāng)jvm第一次使用一個(gè)類時(shí) 需要通過classpath 找到.class = 字節(jié)碼文件
讀入這個(gè)類中的信息(包名 類名 屬性 方法 靜態(tài)的變量 靜態(tài)的方法 。。。)并保存在虛擬機(jī)中 類加載只進(jìn)行一次
類加載的時(shí)機(jī):
1.創(chuàng)建對(duì)象時(shí)
2.類名訪問靜態(tài)成員(靜態(tài)屬性 靜態(tài)方法)
3.子類進(jìn)行類加載時(shí) 會(huì)先進(jìn)行父類的類加載
案例:關(guān)于 1和2 兩種情況類加載
public class Demo{
public static void main(String[] args) {
//1.創(chuàng)建對(duì)象
//Test t = new Test();
//2. 訪問靜態(tài)的成員
System.out.println(Test.a);
}
}
class Test{
static int a = 20;
static{
System.out.println("父類 類加載了");
}
}
案例:關(guān)于 3 情況的類加載
public class Demo{
public static void main(String[] args) {
//創(chuàng)建子類的對(duì)象
//Sub s = new Sub();
System.out.println(Sub.b);
}
}
class Test{
static int a = 20;
static{
System.out.println("父類 類加載了");
}
}
class Sub extends Test{
static int b = 30;
static{
System.out.println("子類進(jìn)行類加載了");
}
}
三、final 最終的
修飾變量
局部變量:final修飾的局部變量只能賦值一次 值一旦賦值不可以改變
常量的定義:
public static final double PI = 3.14159265457;
案例:
public class Demo{
public static void main(String[] args) {
int a = 20;//局部變量
final int b = 10;
a++;
b++;
System.out.println(a);
System.out.println(b);
}
}
public class Demo{
public static void main(String[] args) {
final int a ;//聲明
a = 10;
a = 20;//報(bào)錯(cuò)
System.out.println(a);
}
}
實(shí)例變量
特點(diǎn):
1.final修飾的實(shí)例變量沒有默認(rèn)值
2.final修飾的實(shí)例變量只能賦值一次
3.final修飾的實(shí)例變量可以在構(gòu)造方法中初始化 但是要保證每個(gè)構(gòu)造都必須能夠?yàn)檫@個(gè)變量初始化
案例:
public class Demo{
public static void main(String[] args) {
Animal a = new Animal(250);
//System.out.println(a.a);//0
System.out.println(a.b);
}
}
class Animal{
/*int a = 10;//實(shí)例變量
final int b = 20;*/
int a;
final int b = 20;
public Animal(int b) {
this.b = b;
}
}
public class Demo{
public static void main(String[] args) {
Animal a = new Animal(250);
//System.out.println(a.a);//0
System.out.println(a.b);
}
}
class Animal{
/*int a = 10;//實(shí)例變量
final int b = 20;*/
int a;
final int b ;
public Animal(int b) {
this.b = b;
}
public Animal() {
b = 30;
}
}
類變量
特點(diǎn):
1.final修飾的類變量沒有默認(rèn)值
2.final修飾的類變量可以通過靜態(tài)代碼塊進(jìn)行初始化
案例:
public class Demo{
public static void main(String[] args) {
System.out.println(Animal.a);
System.out.println(Animal.b);
}
}
class Animal{
static int a ;
final static int b ;
static{
b = 250;
}
}
修飾方法
成員方法:
特點(diǎn):
1.final修飾的成員方法可以重載
2.final修飾的成員方法不可以被覆蓋
語法:
public final void m1() {
}
final public void m1() {
}
案例:
public class Demo{
public static void main(String[] args) {
}
}
class Animal{
public void m1() {
System.out.println("m1");
}
}
class Dog extends Animal{
public final void m1() {
System.out.println();
}
}
靜態(tài)方法:
特點(diǎn):
1.final修飾的靜態(tài)方法可以重載
2.final修飾的靜態(tài)方法不可以被覆蓋
案例:
public class Demo{
public static void main(String[] args) {
}
}
class Animal{
public final static void m1() {
System.out.println("m1");
}
public final static void m1(int a) {
System.out.println("m1");
}
}
class Dog extends Animal{
}
修飾類
語法:
final class Animal{
}
特點(diǎn):final修飾的類沒有子類 俗稱斷子絕孫類
jdk的類庫中有哪些final修飾的類?
String Math System
案例:
public class Demo{
public static void main(String[] args) {
}
}
class Dog extends System{
}
四、關(guān)于修飾符混搭的原則
class Animal{
public final static void m1() {
System.out.println("m1");
}
public final static void m1(int a) {
System.out.println("m1");
}
}
class Dog extends Animal{
}
##### 修飾類
```java
語法:
final class Animal{
}
特點(diǎn):final修飾的類沒有子類 俗稱斷子絕孫類
jdk的類庫中有哪些final修飾的類?
String Math System
案例:
public class Demo{
public static void main(String[] args) {
}
}
class Dog extends System{
}
五、關(guān)于修飾符混搭的原則


到此這篇關(guān)于Java開發(fā)必備的三大修飾符的文章就介紹到這了,更多相關(guān)Java三大修飾符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用
這篇文章主要通過實(shí)例介紹了Java的Strus框架中的OGNL表達(dá)式使用,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11
基于springboot創(chuàng)建mybatis的完整步驟
MyBatis是一款優(yōu)秀的數(shù)據(jù)庫持久層框架,相比Hibernate我更喜歡使用MyBatis,看的到SQL還是讓人更安心點(diǎn),這篇文章主要給大家介紹了關(guān)于基于springboot創(chuàng)建mybatis的完整步驟,需要的朋友可以參考下2024-03-03
Java實(shí)現(xiàn)Swing組件定制Button示例
這篇文章主要介紹了Java實(shí)現(xiàn)Swing組件定制Button,涉及java Swing組件Button相關(guān)屬性設(shè)置與使用操作技巧,需要的朋友可以參考下2018-01-01
JDBC 實(shí)現(xiàn)通用的增刪改查基礎(chǔ)類方法
下面小編就為大家分享一篇JDBC 實(shí)現(xiàn)通用的增刪改查基礎(chǔ)類方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
劍指Offer之Java算法習(xí)題精講N叉樹的遍歷及數(shù)組與字符串
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03

