1構(gòu)造代碼塊和static案例
1,1分析過(guò)程
計(jì)數(shù)器
? ? 記錄用戶的登錄次數(shù),當(dāng)前網(wǎng)站訪問(wèn)人數(shù)巩检。元咙。。
自動(dòng)生成用戶ID號(hào)
? ? 會(huì)員ID號(hào)不可以重復(fù)湃密,而且是用戶在申請(qǐng)賬號(hào)時(shí)自動(dòng)生成!四敞!!
分析
1程序不退出泛源,ID號(hào)始終處于一種記錄狀態(tài),保存下一個(gè)用戶的ID號(hào)
2用戶提供不管多少數(shù)據(jù)忿危,都要給予一個(gè)對(duì)應(yīng)的ID號(hào)
解決
? ? ID號(hào)始終處于一種記錄狀態(tài)
1這里需要一個(gè)變量來(lái)保存ID號(hào)
int類型
局部變量:
? ?局部變量在方法內(nèi)达箍,方法運(yùn)行結(jié)束,局部變量銷毀铺厨,無(wú)法作為持久化保存【不能使用】
成員變量:
? ? 成員變量保存在對(duì)象之中缎玫,每一個(gè)對(duì)象保存的數(shù)據(jù)是不一樣的
? ? 而且需要操作對(duì)象來(lái)進(jìn)行獲取,對(duì)象是存在可能性在一定條件下被銷毀的
? ?不具有持久性解滓,操作較為繁瑣
靜態(tài)成員變量:
整個(gè)代碼運(yùn)行周期都存在赃磨,和對(duì)象無(wú)關(guān),可以直接通過(guò)類名操作洼裤,該變量保存在內(nèi)存數(shù)據(jù)區(qū)邻辉,是一個(gè)共享資源
2用戶提供不管多少數(shù)據(jù),都要給予一個(gè)對(duì)應(yīng)的ID號(hào)
用戶使用不同的構(gòu)造方法腮鞍,都要能夠賦值對(duì)應(yīng)ID號(hào)值骇,ID號(hào)不是用戶提供的!R乒吱瘩!
構(gòu)造代碼塊不關(guān)你調(diào)用那一個(gè)new + 構(gòu)造方法,都要執(zhí)行對(duì)應(yīng)的操作
package com.qfen.rxs;
public class Vip {
private int id;
private String name;
private int age;
private String address;
private static int count = 1;
{
id = count;
count += 1;
}
public Vip() {}
public Vip(String name) {
this.name = name;
}
public Vip(String name, int age) {
this.name = name;
this.age = age;
}
public Vip(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static int getCount() {
return count;
}
public static void setCount(int count) {
Vip.count = count;
}
@Override
public String toString() {
return? "Vip [id=" + id + ",nmae" + name + ",age= " +age+",address=" + address + "]";
}
}
2接口【重點(diǎn)】
2.1java中定義接口的格式
關(guān)鍵字:
interface 接口
UI Design User Interface
格式:
interface 接口名{
成員變量
成員方法
}
要求
1接口名大駝峰命名法
2成員變量【缺省屬性】public static final定義時(shí)必須要初始化
3成員方法【缺省屬性】public abstract 方法沒(méi)有方法體
interfaceA{
int num = 10迹缀;
void test()使碾;
}
2.2java中類【尊從】接口格式
關(guān)鍵字
impments
格式:
class A impments B {
}
A類是B接口的實(shí)現(xiàn)類
A類尊從B接口
2.3一個(gè)類可以同時(shí)遵從多個(gè)接口
package com.qfen.rxs;
interface C{
void testC();
}
interface D{
void testD();
}
interface E{
void testE();
}
class F implements C,D,E{
@Override
public void testC() {
System.out.println("遵從接口E蜜徽,實(shí)現(xiàn)testC方法");
}
@Override
public void testD() {
System.out.println("遵從接口E,實(shí)現(xiàn)testD方法");
}
@Override
public void testE() {
System.out.println("遵從接口E部逮,實(shí)現(xiàn)testE方法");
}
}
public class Demo2 {
}
2.4接口可以繼承接口
關(guān)鍵字
extends
package com.qfen.rxs;
interface Usb1_0{
void usb1_0();
}
interface Usb2_0{
void usb2_0();
}
interface Usb3_0{
void usb3_0();
}
interface UsbMi extends Usb1_0, Usb2_0, Usb3_0 {
void usbMi();
}
class MiGameComputer implements UsbMi {
@Override
public void usb1_0() {
System.out.println("兼容USB1.0");
}
@Override
public void usb2_0() {
System.out.println("兼容USB2.0");
}
@Override
public void usb3_0() {
System.out.println("兼容USB3.0");
}
@Override
public void usbMi() {
// TODO Auto-generated method stub
}
}
public class Demo3 {
public static void main(String[] args) {
new MiGameComputer().usb1_0();
new MiGameComputer().usb2_0();
new MiGameComputer().usb3_0();
}
}
2.5abstract類遵從接口
abstract修飾的方法
1沒(méi)有方法體
2必須定義在abstract修飾的類中娜汁,或者interface接口內(nèi)
package com.qfen.rxs;
interface Servlet {
void init();
void service();
}
abstract class BaseServlet implements Servlet{
@Override
public void init() {
System.out.println("BaseServlet實(shí)現(xiàn)init方法");
}
}
class MyServlet extends BaseServlet {
@Override
public void service() {
System.out.println("MyServlet實(shí)現(xiàn)Servlet方法");
}
}
class MyServlet2 extends BaseServlet {
@Override
public void service() {
System.out.println("MyServlet2實(shí)現(xiàn)Servlet方法");
}
}
public class Demo4 {
public static void main(String[] args) {
new MyServlet().init();
new MyServlet().service();
new MyServlet2().init();
new MyServlet2().service();
}
}
2.6JDk1.8新特征default關(guān)鍵字
default關(guān)鍵字可以在接口中使用,用于修飾方法兄朋,使用default關(guān)鍵字修飾的方法在接口中是允許有方法體
【默認(rèn)方法】【非強(qiáng)制重寫方法】
package com.qfen.rxs;
interface DefaultInterface {
void test();
default public void testDefault() {
System.out.println("testDefault() 默認(rèn)方法非強(qiáng)制重寫方法");
}
default public void defaultMethod() {
System.out.println("defaultMethod() 默認(rèn)方法非強(qiáng)制重寫方法");
}
}
class Demo implements DefaultInterface {
@Override
public void test() {
System.out.println("強(qiáng)制實(shí)現(xiàn)的test方法");
}
@Override
public void testDefault() {
System.out.println("實(shí)現(xiàn)類重寫default方法");
}
}
public class Demo5 {
public static void main(String[] args) {
new Demo().test();
new Demo().testDefault();
new Demo().defaultMethod();
}
}
3多態(tài)【重點(diǎn)】
package com.qfen.rxs;
class Animal {
}
class Tiger extends Animal {
}
class Panda extends Animal {
}
class Monkey extends Animal {
}
public class Demo6 {
public static void main(String[] args) {
Animal animal = new Animal();
Tiger tiger = new Tiger();
Panda panda = new Panda();
Monkey monkey = new Monkey();
showAnimal(animal);
showAnimal(tiger);
showAnimal(panda);
showAnimal(monkey);
Panda p = (Panda)getAnimal();
//Animal animal1 = getAnimal();
System.out.println(p);
}
private static Panda getAnimal() {
// TODO Auto-generated method stub
return new Panda();
}
private static void showAnimal(Animal animal) {
// TODO Auto-generated method stub
System.out.println(animal);
}
}
3.2小總結(jié)
1一個(gè)方法需要的參數(shù)是父類掐禁,傳入實(shí)際參數(shù)是父類對(duì)象本身,或者其子類對(duì)象都是Ok的
2一個(gè)方法返回值類型是父類颅和,實(shí)際返回的數(shù)據(jù)時(shí)父類對(duì)象本身或者其子類對(duì)象也是Ok
3引用數(shù)據(jù)類型之間的強(qiáng)制類型轉(zhuǎn)換時(shí)語(yǔ)序使用傅事,但是要求明確真實(shí)數(shù)據(jù)類型是一致的,不然會(huì)導(dǎo)致異常ClassCastException
package com.qfen.rxs;
interface USB {
void connect();
}
class Mouse implements USB {
@Override
public void connect() {
System.out.println("鼠標(biāo)控制光標(biāo)");
}
}
class Logi extends Mouse {
@Override
public void connect() {
System.out.println("Logi Master 2S");
}
}
class Keyboard implements USB {
@Override
public void connect() {
System.out.println("鍵盤敲代碼");
}
}
class IKBC? extends Keyboard {
@Override
public void connect() {
System.out.println("IKBC C87 ");
}
}
class Computer {
public void useUSBInterface(USB usb) {
usb.connect();
}
}
public class Rxs {
public static void main(String[] args) {
Computer computer = new Computer();
Mouse mouse = new Mouse();
Keyboard keyboard = new Keyboard();
computer.useUSBInterface(mouse);
computer.useUSBInterface(keyboard);
computer.useUSBInterface(new Logi());
computer.useUSBInterface(new IKBC());
}
}
3.3總結(jié)
1一個(gè)方法需要的參數(shù)是usb接口但是傳入的對(duì)象時(shí)USB接口的直接實(shí)現(xiàn)類或者間接實(shí)現(xiàn)類都是可以的
2代碼整個(gè)過(guò)程中是完全符合生活邏輯
3.4這其實(shí)是多態(tài)【背】
1父類的引用指向子類的對(duì)象
2或者接口的應(yīng)用指向遵從接口的類對(duì)象