日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础(三)面向对象(下)

發(fā)布時間:2025/4/16 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础(三)面向对象(下) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

接口

接口中成員修飾符是固定的:

成員常量:public static final 成員函數(shù):public abstract

通過接口間接實現(xiàn)了多重繼承

接口的特點

接口是對外暴露的規(guī)則 接口是程序的工功能擴展 接口的出現(xiàn)降低耦合性 接口可以用來多實現(xiàn) 類與接口之間是實現(xiàn)關(guān)系,而且類可以繼承一個類的同時實現(xiàn)多個接口 接口與接口之間可以有繼承關(guān)系

接口與抽象類

抽象類體現(xiàn)繼承關(guān)系,一個類只能單繼承 接口體現(xiàn)實現(xiàn)關(guān)系,一個類可以多實現(xiàn)

抽象類中可以定義非抽象方法,供子類直接使用 接口的方法都是抽象,接口中的成員都有固定修飾符

一個簡單的實現(xiàn)例子:

package study_java.ex7;public class InterfaceDemo1 {public static void main(String[] args){PC pc = new PC();Mouse m = new Mouse();Iphone ip = new Iphone();pc.insertUSB(m);pc.insertUSB(ip);} }// 定義接口 interface USB{void connect(); }// 類實現(xiàn)了接口 class Mouse implements USB{public void connect(){System.out.println("我是鼠標");} }class Iphone implements USB{public void connect(){System.out.println("我是Iphone");} }class PC {public void insertUSB(USB usb){System.out.println("插入了usb設(shè)備");usb.connect();} }

如果有多個接口,并且接口存在繼承的時候,代碼例子如下:

package study_java.ex7;public class InterfaceDemo2 {public static void main(String[] args){TuHao th = new TuHao();WomanStar ws = new WomanStar();th.marry(ws);} }interface White{public void white(); }interface Rich{public void rich(); }interface Beautiful{public void beautiful(); }interface BFM extends White,Rich,Beautiful{}class WomanStar implements BFM{public void white(){System.out.println("我很白");}public void rich(){System.out.println("我很有錢");}public void beautiful(){System.out.println("我很有漂亮");} }class TuHao{public void marry(BFM bfm){bfm.white();bfm.rich();bfm.beautiful();} }

多態(tài)

定義:某一類事物的多種存在形態(tài)

多態(tài)的特點:

成員函數(shù) 編譯時:要查看引用變量所屬類中是否有所調(diào)用的成員

在運行時:要查看對象所屬類是否有所調(diào)用的成員 成員變量 只看引用變量所屬的類

關(guān)于多態(tài)的一個代碼例子:

package study_java.ex7;public class MutilstateDemo1 {public static void main(String[] args){Jing8 jing8 = new Jing8();jing8.meng();jing8.cry();Dog dog = new Jing8();dog.cry();dog.watch();Animal a = dog;a.cry();Pet pet = (Pet) a;pet.meng();} }abstract class Animal{public void cry(){System.out.println("crying...");} }class Dog extends Animal{public void watch(){System.out.println("來人了");} }class Jing8 extends Dog implements Pet{public void meng(){System.out.println("么么噠");} }interface Pet{void meng(); }

繼承中方法可以被覆蓋,但是成員變量不能被覆蓋

代碼例子:

package study_java.ex7;public class MultiStatDemo2 {public static void main(String[] args){Jing8 j = new Jing8();j.cry();Dog dog = j;dog.cry();System.out.println(j.name);System.out.println(dog.name);} }abstract class Animal{abstract public void cry(); }class Dog extends Animal{public String name = "大黃";public void cry(){System.out.println("旺旺");} }class Jing8 extends Dog{public String name = "小黃";public void cry(){System.out.println("嘿嘿");} }

異常

異常的體系: Throwable: Error:通常出現(xiàn)重大問題如:運行的類不存在或者內(nèi)存溢出,不編寫代碼針對處理 Exception:運行時出現(xiàn)的一些情況,可以通過try catch finally

Exception 和Error的子類名都是以父類名作為后綴的

Trowable中的方法

getMessage():獲取異常信息,返回字符串

toString():獲取異常信息和異常類名,返回字符串

printStackTrace():獲取異常類名和異常信息,以及異常出現(xiàn)在程序中的位置,返回值void

printStackTrace(printStram s):通常用該方法將異常內(nèi)容保存在日志文件中

throws和throw

throws用于標識函數(shù)暴露出的異常 throw用于拋出異常對象 throws和throw的區(qū)別: throws用在函數(shù)上,后面跟異常類名,聲明拋出異常時使用的關(guān)鍵字 throw用在函數(shù)內(nèi),后面跟異常對象,拋出異常的語句

異常處理

try { 需要檢測的代碼 } catch { 異常處理代碼 } finally { 一定會執(zhí)行的代碼 }

Finally代碼只有一種情況不會被執(zhí)行,就是在之前執(zhí)行了System.exit(0)

package study_java.ex8;public class ThrowableDemo1 {public static void main(String[] args){float r = divide(4,0);System.out.println(r);int[] arr = null;int[] arr2 = new int[4]; // System.out.println(getLength(arr2)); System.out.println(getLength(arr));}public static float divide(int a, int b){return (float) a / b;}public static int getLength(int[] arr){int len = -1;try {len = arr.length;}catch (Exception e){System.out.println("出錯了"+ e.getMessage());// return -2; 這里一般也不會加return }finally {len += 1;System.out.println("程序執(zhí)行完了");// return len; 這里一般不會加return }return len;} }

自定義異常

自定義類繼承Exception或者其子類

通過構(gòu)造函數(shù)定義異常信息

通過throw將自定義異常拋出

一個簡單的例子:

package study_java.ex7;public class ExceptionDemo1 {public static void main(String[] args){Person p = new Person();try{p.setAge(1000);}catch (Exception e){((AgeTooBigException)e).printlnError();}} }class Person{private int age;public int getAge(){return age;}public void setAge(int age) throws AgeTooBigException {if (age > 200) {throw new AgeTooBigException();}this.age = age;} }class AgeTooBigException extends Exception{private String info;public AgeTooBigException(String info){this.info=info;}public AgeTooBigException(){this("年齡太大了");}public void printlnError(){System.out.println(info);} }

一個稍微復(fù)雜的例子:

package study_java.ex7;public class ExceptionDemo1 {public static void main(String[] args){Person p = new Person();try{p.setAge(-10);}catch (AgeTooBigException e){e.printlnError();}catch (AgeTooSmallException e){e.printlnError();}catch (AgeInvalidException e){e.printlnError();}} }class Person{private int age;public int getAge(){return age;}public void setAge(int age) throws AgeTooBigException,AgeTooSmallException,AgeInvalidException {if (age > 200) {throw new AgeTooBigException();}else if (age <10 && age > 0){throw new AgeTooSmallException();}else if (age < 0){throw new AgeInvalidException("年齡非法");}else{this.age = age;}} }// 年齡非法異常 class AgeInvalidException extends Exception{private String info;public AgeInvalidException(String info){this.info = info;}public void printlnError(){System.out.println(info);} }// 年齡太大異常 class AgeTooBigException extends AgeInvalidException{public AgeTooBigException(String info){super(info);}public AgeTooBigException(){this("年齡太大了");} }// 年齡太小異常 class AgeTooSmallException extends AgeInvalidException{public AgeTooSmallException(String info){super(info);}public AgeTooSmallException(){this("年齡太小了");} }

如果我們不處理異常而是直接拋出可以直接在man函數(shù)里拋出異常,這樣就將異常拋給了java虛擬機

package study_java.ex8;public class ExceptionDemo1 {public static void main(String[] args) throws Exception {Person p = new Person();p.setAge(-10);// 處理異常/*try{p.setAge(2);}catch (AgeTooSmallException e){e.printlnError();}catch (AgeTooBigException e){e.printlnError();}catch (AgeInvalidException e){e.printlnError();}*/} }class Person{private int age;public int getAge(){return age;}public void setAge(int age) throws AgeTooBigException,AgeTooSmallException,AgeInvalidException{if (age> 200){throw new AgeTooBigException();}else if (age < 10 && age > 0){throw new AgeTooSmallException();}else if (age < 0){throw new AgeInvalidException("年齡不合法");}else {this.age = age;}} }class AgeInvalidException extends Exception{private String info;public AgeInvalidException(String info){this.info = info;}public void printlnError(){System.out.println(info);} }class AgeTooBigException extends AgeInvalidException{public AgeTooBigException(String info){super(info);}public AgeTooBigException(){this("年齡太大了");} }class AgeTooSmallException extends AgeInvalidException{public AgeTooSmallException(String info){super(info);}public AgeTooSmallException(){this("年齡太小了");} }

關(guān)于異常處理的細節(jié):

RuntimeException 以及其子類如果在函數(shù)中被throw拋出,可以不用再函數(shù)上聲明拋出語句,也不是必須用try catch語句處理 一個方法被覆蓋時,覆蓋它的方法必須拋出相同的異常或者異常的子類 如果父類拋出多個異常,那么重寫(覆蓋)方法必須拋出那些異常的一個子集,不能拋出新的異常

CheckedException 待檢異常,也就是非運行時異常,必須使用try catch語句處理

包的概念

對類文件進行分類管理 給類提供多層命名空間 卸載程序文件的第一行 類名的全稱的是包名.類名 包也是一種封裝方式

如: javac -d classes PackageDemo1.java 編譯java源文件,制定存放目錄 java -cp classes com.zhaofan.java.PackageDemo1 運行程序,類全限定名

包之間的訪問: 被訪問的包中的類權(quán)限必須是public 類中的成員權(quán)限:public 或者protected protected是為其他包中的子類提供的一種權(quán)限

如果一個類是public 文件名必須是類名

這里順便整理一下常見的幾種權(quán)限在java中:

?

import導(dǎo)入

一個程序文件中只有一個package,可以有多個import 用來導(dǎo)包的類,不導(dǎo)入包中的包

小結(jié):

private 私有的不能繼承

public

protected 受保護的,針對其他包中的子類

default 默認,不寫,不同包不能繼承

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhaof/p/9267774.html

總結(jié)

以上是生活随笔為你收集整理的Java基础(三)面向对象(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。