目錄
我們提供的服務有:網(wǎng)站設計、成都網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、康巴什ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的康巴什網(wǎng)站制作公司一、萬物皆對象?? ?
二、類的定義方式以及對象的實例化
1.類的定義方式
2.對象的實例化
三、類中的成員變量和成員方法的使用?
1.static修飾成員變量?
2.static修飾成員方法?
四、對象的整個初始化過程
1.?初始化對象
2.構(gòu)造方法
3.默認初始化 ?
4.就地初始化
五、封裝特性
訪問限定符?
六、代碼塊
1.普通代碼塊
2.構(gòu)造代碼塊?
3.靜態(tài)代碼塊?
七、內(nèi)部類
1.成員內(nèi)部類
1)普通內(nèi)部類
2)靜態(tài)內(nèi)部類?
2.局部內(nèi)部類
1. 在學習類和對象之前先了解一下面向?qū)ο蟮倪^程:
一圖可解傳統(tǒng)洗衣服都面向一個過程:拿水盆->倒水->放衣服->放洗衣粉->手搓->換水->放洗衣粉->手搓->擰干->晾衣服,少一個環(huán)節(jié)可能都不行
? 2.那么接下來關于面向?qū)ο笙匆路?
二、類的定義方式以及對象的實例化以面向?qū)ο蠓绞絹磉M行處理,就不關注洗衣服的過程,具體洗衣機是怎么來洗衣服,如何來甩干的,用戶不用去關心,只需要將衣服放進洗衣機,導入洗衣粉,啟動開關
類是用來對一個實體(對象),主要描述該實體(對象)具有哪些屬性(外觀尺寸等),哪些功能(用來干啥)
1.類的定義方式// 創(chuàng)建類
class ClassName{
field; // 字段(屬性) 或者 成員變量
method; // 行為 或者 成員方法
}
public class WashMachine {
public String brand;// 品牌
public String type;// 型號
public double weight;// 重量
public double lenght;// 長
public double weigth;// 寬
public double height;// 高
public String color;// 高
public void washClothes(){// 洗衣服
System.out.println("洗衣功能");
}
public void dryClothes(){// 脫水
System.out.println("脫水功能");
}
public void setTime(){// 定時
System.out.println("定時功能");
}
}
public class PetDog {
//定義一個狗類
public String name;//名字
public String color;//顏色
// 狗的屬性
public void barks(){
System.out.println(name+":汪汪汪~~~");
}
// 狗的行為
public void wag(){
System.out.println(name+":搖尾巴~~~");
}
}
2.對象的實例化public class Main {
//實例化
public static void main(String[] args) {
PetDog dogh = new PetDog();//通過new實例化對象
dogh.name = "阿黃";
dogh.color = "黑黃";
dogh.barks();
dogh.wag();
PetDog dogs = new PetDog();
dogh.name = "阿黃";
dogh.color = "黑黃";
dogh.barks();
dogh.wag();
}
}
public class Date {
public int year;
public int month;
public int day;
public void setDay(int year,int month,int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year+"/"+this.month+"/"+this.day);
}
public static void main(String[] args) {
Date d = new Date();
d.setDay(2023,1,12);
d.printDate();
}
}
三、類中的成員變量和成員方法的使用?1.static修飾成員變量?【this引用的特性】
????????1. this的類型:對應類類型引用,哪個對象調(diào)用就是哪個對象的引用類型 ????????2. this只能在 " 成員方法 " 中使用 ????????3. 在 " 成員方法 " 中, this 只能引用當前對象,不能再引用其他對象 ????????4. this是 “ 成員方法 ” 第一個隱藏的參數(shù),編譯器會自動傳遞
public class Student1{
public String name;
public String sex;
public int age;
public double score;
public static String classRoom = "Bit306";
public static void main(String[] args) {
// 靜態(tài)成員變量可以直接通過類名訪問
System.out.println(Student1.classRoom);
Student1 s1 = new Student1("LiLeiLei","男",18,3.8);
Student1 s2 = new Student1("HanMeiMei","女",19,4.0);
Student1 s3 = new Student1("Jim","男",18,2.6);
// 也可以通過對象訪問:但是classRoom是三個對象共享的
System.out.println(s1.classRoom);
System.out.println(s2.classRoom);
System.out.println(s3.classRoom);
}
}
2.static修飾成員方法?【靜態(tài)成員變量特性】
????????1. 不屬于某個具體的對象,是類的屬性,所有對象共享不存儲在某個對象的空間中 ????????2. 既可以通過對象訪問,也可以通過類名訪問 ????????3. 類變量存儲在方法區(qū)當中 ? ? ? ? 4. 生命周期伴隨類的一生 ( 隨類的加載而創(chuàng)建,隨類的卸載而銷毀 )
public class Student2 {
public String name;
public String gender;
public int age;
public double score;
public static String classRoom = "Bit306";
public static String getClassRoom(){
return classRoom;
}
public static void main(String[] args) {
System.out.println(Student2.classRoom);
}
}
四、對象的整個初始化過程 1.?初始化對象【靜態(tài)方法特性】
1. 不屬于某個具體的對象,是類方法
2. 可以通過對象調(diào)用,也可以通過類名.靜態(tài)方法名(...)方式調(diào)用
3. 靜態(tài)方法沒有隱藏的this引用參數(shù)
4. 靜態(tài)方法中不能調(diào)用任何非靜態(tài)方法
public class Date {
public int year;
public int month;
public int day;
// 構(gòu)造方法:
// 名字與類名相同,沒有返回值類型,設置為void也不行
// 一般情況下使用public修飾
// 在創(chuàng)建對象時由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次
public Date(int year,int month,int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(this.year+"/"+this.month+"/"+this.day);
}
public static void main(String[] args) {
// 此處創(chuàng)建了一個Date類型的對象,并沒有顯式調(diào)用構(gòu)造方法
Date d = new Date(2023,1,12);// 輸出Date(int,int,int)方法被調(diào)用了
d.printDate();//2023/1/12
}
}
3.默認初始化 ?【構(gòu)造方法特性 】
????????1. 名字必須與類名相同 ????????2. 沒有返回值類型,設置為 void 也不行 ????????3. 創(chuàng)建對象時由編譯器自動調(diào)用,并且在對象的生命周期內(nèi)只調(diào)用一次 ????????4. 構(gòu)造方法可以重載 ( 用戶根據(jù)自己的需求提供不同參數(shù)的構(gòu)造方法 )public class Date1 { public int year; public int month; public int day; //無參構(gòu)造方法 public Date1() { this.year = 2023; this.month = 1; this.day = 12; } //帶有三個參數(shù)的構(gòu)造方法 public Date1(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } public void printDate(){ System.out.println(year+"-"+month+"-"+day); } public static void main(String[] args) { Date1 d = new Date1(); d.printDate(); } }
- 名字相同,參數(shù)列表不同構(gòu)成了方法重載
?5. 如果用戶沒有顯式定義,編譯器會生成一份默認的構(gòu)造方法,生成的默認構(gòu)造方法一定無參
public class Snakek {
private int age;
public static void main(String[] args) {
Snakek snakek = new Snakek();
System.out.println(snakek.age);//0
}
}
4.就地初始化在程序?qū)用嬷皇呛唵蔚囊粭l語句,在JVM層面需要做好多事情,下面簡單了解:
????????1. 檢測對象對應的類是否加載了,如果沒有加載則加載 ????????2. 為對象分配內(nèi)存空間 ????????3. 處理并發(fā)安全問題 ????????4. 初始化所分配的空間
public class Date2 {
public int year = 2023;
public int month = 1;
public int day = 12;
public Date2() {
}
public Date2(int year, int month, int day) {
}
public static void main(String[] args) {
Date2 d1 = new Date2(2023,1,12);
Date2 d2 = new Date2();
}
}
五、封裝特性封裝:將數(shù)據(jù)和操作數(shù)據(jù)的方法進行有機結(jié)合,隱藏對象的屬性和實現(xiàn)細節(jié),僅對外公開接口來和對象進行 交互?
訪問限定符?public :可以理解為一個人的外貌特征,誰都可以看得到 default: 對于自己家族中 ( 同一個包中 ) 不是什么秘密,對于其他人來說就是隱私了 private :只有自己知道,其他人都不知道
public class Computer {
private String cpu;//cpu
private String memory;//內(nèi)存
public String screen;//屏幕
String brand;// 品牌---->default屬性
public Computer(String cpu, String memory, String screen, String brand) {
this.cpu = cpu;
this.memory = memory;
this.screen = screen;
this.brand = brand;
}
public void Boot(){
System.out.println("開機~~~");
}
public void PowerOff(){
System.out.println("關機~~~");
}
public void SurfInternet(){
System.out.println("上網(wǎng)~~~");
}
}
public class TestComputer {
public static void main(String[] args) {
Computer p = new Computer("HW","17","8G","13*14");
System.out.println(p.brand);// default屬性:只能被本包中類訪問
System.out.println(p.screen);// public屬性: 可以任何其他類訪問
//System.out.println(p.cpu);// private屬性:只能在Computer類中訪問,不能被其他類訪問
}
}
1.普通代碼塊使用 {} 定義的一段代碼稱為代碼塊。根據(jù)代碼塊定義的位置以及關鍵字可分為以下四種?:普通代碼塊 、構(gòu)造塊 、靜態(tài)塊 、同步代碼塊(后續(xù)講解多線程部分再談)
public class Main {
public static void main(String[] args) {
{ //直接使用{}定義,普通方法塊
int x = 10;
System.out.println("x1 = "+x);//x1 = 10
}
int x = 100;
System.out.println("x2 = "+x);//x2 = 100
}
}
2.構(gòu)造代碼塊?public class Student {
//實例成員變量
private String name;
private String sex;
private int age;
private double score;
public Student() {
System.out.println("l am Student in it ()!");
}
//實例代碼塊
{
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.show();
}
}
3.靜態(tài)代碼塊?public class Student1 {
private String name;
private String gender;
private int age;
private double score;
private static String classRoom;
//實例化代碼塊
{
this.name = "bit";
this.age = 12;
this.gender = "man";
System.out.println("I am instance init()!");
}
//靜態(tài)代碼塊
static {
classRoom = "bit306";
System.out.println("I am static init()!");
}
public Student1() {
System.out.println("I am Student init()!");
}
public static void main(String[] args) {
Student1 s1 = new Student1();
Student1 s2 = new Student1();
}
}
七、內(nèi)部類【注意事項】
? 1.靜態(tài)代碼塊不管生成多少個對象,其只會執(zhí)行一次
? 2.靜態(tài)成員變量是類的屬性
? 3.如果一個類中包含多個靜態(tài)代碼塊,在編譯代碼時,編譯器會按照定義的先后次序依次合并,最終放在生成的方法中,該方法在類加載時調(diào)用,并且只調(diào)用一次
? 4.實例代碼塊只有在創(chuàng)建對象時才會執(zhí)行
1)普通內(nèi)部類在外部類中,內(nèi)部類定義位置與外部類成員所處的位置相同?
public class OutClass1 {
private int a;
static int b;
int c;
public void methodA(){
a = 10;
System.out.println(a);
}
public static void methodB(){
System.out.println(b);
}
// 成員內(nèi)部類:未被static修飾
class InnerClass{
int c;
public void methodInner(){
// 在內(nèi)部類中可以直接訪問外部類中:任意訪問限定符修飾的成員
a = 100;
b = 200;
methodA();
methodB();
// 如果外部類和內(nèi)部類中具有相同名稱成員時,優(yōu)先訪問的是內(nèi)部類自己的
c = 300;
System.out.println(c);
// 如果要訪問外部類同名成員時候,必須:外部類名稱.this.同名成員名字
OutClass1.this.c = 400;
System.out.println(c);
}
}
public static void main(String[] args) {
// 外部類:對象創(chuàng)建 以及 成員訪問
OutClass1 outClass1 = new OutClass1();
System.out.println(outClass1.a);
System.out.println(outClass1.b);
System.out.println(outClass1.c);
outClass1.methodA();
outClass1.methodB();
System.out.println("=============內(nèi)部類的訪問=============");
// 創(chuàng)建內(nèi)部類對象
InnerClass innerClass = new OutClass1().new InnerClass();
// 先將外部類對象先創(chuàng)建出來,然后再創(chuàng)建內(nèi)部類對象
InnerClass innerClass2 = outClass1.new InnerClass();
innerClass2.methodInner();
}
}
【 注意事項 】 ????????1. 外部類中的任何成員都可以被在普通內(nèi)部類方法中直接訪問 ? ? ? ? 2. 在內(nèi)部類方法中訪問同名的成員時,優(yōu)先訪問自己的 ? ? ? ? 3. 普通內(nèi)部類對象必須在先有外部類對象前提下才能創(chuàng)建 ? ? ? ? 4. 外部類中,不能直接訪問內(nèi)部類中的成員,如果要訪問必須先要創(chuàng)建外部類的對象2)靜態(tài)內(nèi)部類?
public class OutClass2 {
private int a;
static int b;
public void methodA(){
a = 10;
System.out.println(a);
}
public static void methodB(){
System.out.println(b);
}
// 靜態(tài)內(nèi)部類:被static修飾的成員內(nèi)部類
static class InnerClass{
public void methodInner(){
// 在內(nèi)部類中只能訪問外部類的靜態(tài)成員
//a = 100; // 編譯失敗,因為a不是類成員變量
b = 200;
//methodA(); // 編譯失敗,因為methodB()不是類成員方法
methodB();
}
}
public static void main(String[] args) {
// 靜態(tài)內(nèi)部類對象創(chuàng)建 & 成員訪問
InnerClass innerClass = new InnerClass();
innerClass.methodInner();
}
}
【 注意事項 】 ????????1. 在內(nèi)部類中只能訪問外部類中的靜態(tài)成員 ????????2. 創(chuàng)建內(nèi)部類對象時,不需要先創(chuàng)建外部類對象2.局部內(nèi)部類
public class OutClass3 {
int a = 10;
public void method(){
int b = 10;
// 局部內(nèi)部類:定義在方法體內(nèi)部
// 不能被public、static等訪問限定符修飾
class InnerClass{
public void methodInnerClass(){
System.out.println(a);
System.out.println(b);
}
}
// 只能在該方法體內(nèi)部使用,其他位置都不能用
InnerClass innerClass = new InnerClass();
innerClass.methodInnerClass();
}
public static void main(String[] args) {
//OutClass2.InnerClass innerClass = null;編譯失敗
}
}
【 注意事項 】 ????????1. 局部內(nèi)部類只能在所定義的方法體內(nèi)部使用 ????????2. 不能被 public 、 static 等修飾符修飾與君共勉:時間最不偏私,給任何人都是二十四小時;時間也最偏私,給任何人都不是二十四小時
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧