Java基礎教程:面向對象編程[2]

Java基礎教程:面向對象編程[2]

內容大綱

  

訪問修飾符

四種訪問修飾符

Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限。

  • default?(即缺省,什么也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。

  • private?: 在同一類內可見。使用對象:變量、方法。?注意:不能修飾類(外部類)

  • public?: 對所有類可見。使用對象:類、接口、變量、方法

  • protected?: 對同一包內的類和所有子類可見。使用對象:變量、方法。?注意:不能修飾類(外部類)

訪問權限?

封裝

  封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部份包裝、隱藏起來的方法。封裝可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問

使用封裝我們可以對成員變量進行更精確的控制,同時隱藏信息,實現細節等

方法:

public class Person{private String name;private int age;
?public int getAge(){return age;}
?public String getName(){return name;}
?public void setAge(int age){this.age = age;}
?public void setName(String name){this.name = name;}
}

說明:

  以上實例中public方法是外部類訪問該類成員變量的入口。通常情況下,這些方法被稱為getter和setter方法。因此,任何要訪問類中私有成員變量的類都要通過這些getter和setter方法

繼承

  繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。繼承符合的關系是 is-a 的關系,父類更通用,子類更具體

  

方法

class 父類 {
}class 子類 extends 父類 {
}

說明:

  • 子類擁有父類非private的屬性,方法

  • 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展

  • 子類可以用自己的方式實現父類的方法

  • Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關系就是C類是B類的父類,B類是A類的父類,這是java繼承區別于C++繼承的一個特性。

  • 提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系)。

多態

  多態是同一個行為具有多個不同表現形式或形態的能力。多態就是同一個接口,使用不同的實例而執行不同操作,如圖所示

  

方法:

public class Test {public static void main(String[] args) {show(new Cat());  // 以 Cat 對象調用 show 方法show(new Dog());  // 以 Dog 對象調用 show 方法Animal a = new Cat();  // 向上轉型  a.eat();               // 調用的是 Cat 的 eatCat c = (Cat)a;        // 向下轉型  c.work();        // 調用的是 Cat 的 work}  public static void show(Animal a)  {a.eat();  // 類型判斷if (a instanceof Cat)  {  // 貓做的事情 Cat c = (Cat)a;  c.work();  } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a;  c.work();  }  }  
}abstract class Animal {  abstract void eat();  
}  class Cat extends Animal {  public void eat() {  System.out.println("吃魚");  }  public void work() {  System.out.println("抓老鼠");  }  
}  class Dog extends Animal {  public void eat() {  System.out.println("吃骨頭");  }  public void work() {  System.out.println("看家");  }  
}

說明:

多態存在的三個必要條件:

  • 繼承
  • 重寫
  • 父類引用指向子類對象

當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法

多態的好處:可以使程序有良好的擴展,并可以對所有類的對象進行通用處理

集合框架

體系結構

  

  

遍歷ArrayList

import java.util.*;public class Test{public static void main(String[] args) {List<String> list=new ArrayList<String>();list.add("Hello");list.add("World");list.add("HAHAHAHA");//第一種遍歷方法使用foreach遍歷Listfor (String str : list) {            //也可以改寫for(int i=0;i<list.size();i++)這種形式System.out.println(str);}//第二種遍歷,把鏈表變為數組相關的內容進行遍歷String[] strArray=new String[list.size()];list.toArray(strArray);for(int i=0;i<strArray.length;i++) //這里也可以改寫為  foreach(String str:strArray)這種形式{System.out.println(strArray[i]);}//第三種遍歷 使用迭代器進行相關遍歷Iterator<String> ite=list.iterator();while(ite.hasNext())//判斷下一個元素之后有值{System.out.println(ite.next());}}
}

遍歷HashMap

import java.util.*;public class Test{public static void main(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("1", "value1");map.put("2", "value2");map.put("3", "value3");//第一種:普遍使用,二次取值System.out.println("通過Map.keySet遍歷key和value:");for (String key : map.keySet()) {System.out.println("key= "+ key + " and value= " + map.get(key));}//第二種System.out.println("通過Map.entrySet使用iterator遍歷key和value:");Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, String> entry = it.next();System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());}//第三種:推薦,尤其是容量大時System.out.println("通過Map.entrySet遍歷key和value");for (Map.Entry<String, String> entry : map.entrySet()) {System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());}//第四種System.out.println("通過Map.values()遍歷所有的value,但不能遍歷key");for (String v : map.values()) {System.out.println("value= " + v);}}
}

文件持久化

對象序列化

  如果對象能夠在程序不運行的情況下仍能夠存在并保存信息,那將是非常有用的。這樣在下次時,該對象將被重建并且擁有的信息能夠在程序上次運行時它所擁有的信息相同。

  Java的對象序列化能夠將那些實現了Serializable接口的對象轉換成一個字節序列,并能夠在以后將這個字節序列完全恢復為原來的對象。這一過程甚至可通過網絡進行;這意味這序列化能夠自動彌補不同操作系統之間的差異。

序列化代碼

import java.io.*;public class SerializeDemo
{public static void main(String [] args){Employee e = new Employee();e.name = "Reyan Ali";e.address = "Phokka Kuan, Ambehta Peer";e.SSN = 11122333;e.number = 101;try{FileOutputStream fileOut =new FileOutputStream("/tmp/employee.ser");ObjectOutputStream out = new ObjectOutputStream(fileOut);out.writeObject(e);out.close();fileOut.close();System.out.printf("Serialized data is saved in /tmp/employee.ser");}catch(IOException i){i.printStackTrace();}}
}

反序列化代碼:

import java.io.*;public class DeserializeDemo
{public static void main(String [] args){Employee e = null;try{FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");ObjectInputStream in = new ObjectInputStream(fileIn);e = (Employee) in.readObject();in.close();fileIn.close();}catch(IOException i){i.printStackTrace();return;}catch(ClassNotFoundException c){System.out.println("Employee class not found");c.printStackTrace();return;}System.out.println("Deserialized Employee...");System.out.println("Name: " + e.name);System.out.println("Address: " + e.address);System.out.println("SSN: " + e.SSN);System.out.println("Number: " + e.number);}
}

文件操作  

IO流

  

具體使用方法詳見:http://www.runoob.com/java/java-files-io.html?

?

轉載于:https://www.cnblogs.com/MrSaver/p/8824882.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251958.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【javascript】異步編年史,從“純回調”到Promise

異步和分塊——程序的分塊執行 一開始學習javascript的時候&#xff0c; 我對異步的概念一臉懵逼&#xff0c; 因為當時百度了很多文章&#xff0c;但很多各種文章不負責任的把籠統的描述混雜在一起&#xff0c;讓我對這個 JS中的重要概念難以理解&#xff0c; “異步是非阻塞的…

Shell編程之if語法練習(LNMP)全過程

大家好&#xff0c;我是延凱&#xff0c;本人原來在CSDN寫作已經快一年了 都是相關Linux運維這方面的技術知識&#xff0c;現在搬到博客園也是我一直想的&#xff0c;本博客主要寫Python&#xff0c;docker&#xff0c;shell等偏向開發云計算等知識點&#xff0c;謝謝各位&…

基于UNet和camvid數據集的道路分割

基于UNet和camvid數據集的道路分割h(1.3.0)&#xff1a; 背景 語義分割是深度學習中的一個非常重要的研究方向&#xff0c;并且UNet是語義分割中一個非常經典的模型。在本次博客中&#xff0c;我嘗試用UNet對camvid dataset數據集進行道路分割&#xff0c;大致期望的效果如下&…

二分法查找和普通查找

一、普通查找 對于數組和一個需要查找的元素來說&#xff0c;普通查找的原理很簡單&#xff0c;即為從數組的第一個元素到最后一個元素進行遍歷&#xff0c;如果第i個元素的值等于我們需要查找的值&#xff0c;那么返回找到的角標i&#xff0c;否則返回-1表示沒有查找到。這里以…

Linux下安裝zookeeper集群(奇數個)

1、 解壓zookeeper壓縮包 2、 data里創建“myid”文件&#xff08;命令touch myid&#xff09;&#xff0c;內容是1&#xff08;命令 echo 1 >> myid&#xff09; 3、 zoo.cnf里配置dataDir、clientport、server.nIP:端口1&#xff08;2881&#xff09;&#xff1a;端…

立體標定

立體標定應用標定數據轉換成深度圖標定 由于攝像頭目前是我們手動進行定位的&#xff0c;我們現在還不知道兩張圖像與世界坐標之間的耦合關系&#xff0c;所以下一步要進行的是標定&#xff0c;用來確定分別獲取兩個攝像頭的內部參數&#xff0c;并且根據兩個攝像頭在同一個世…

if _name_ == _main_

1.作用 py文件有2種使用方法&#xff0c;第1是自己本腳本自己獨立執行&#xff1b;第2是被import到其他文件腳本中執行. if _name_ " _main_" 該語句控制其他下一步的腳本是否執行。如果是自己本腳本獨立執行&#xff0c;那就運行該if條件下的腳本&#xff1b;如果…

LLVM完整參考安裝

文章目錄 一、直接下載編譯好的,見圖片命令二、下載源代碼自己編譯安裝 下面提供下載并mv完全的文件包三、安裝LLVM編譯器一、直接下載編譯好的,見圖片命令 這里使用llvm官網編譯好的包, 直接解壓即可用LLVM下載官網點擊這里下載llvm-6.0.1 下載完成后解壓tar -vxf clangllv…

微軟正式釋出基于 Chromium 的 Edge 預覽版本

百度智能云域名服務&#xff0c;.com新用戶首購僅需25元 微軟基于 Chromium 的全新版本 Edge 一直吸引著開發者與用戶的目光&#xff0c;當地時間 8 日&#xff0c;官方終于釋出了第一個 Dev 和 Canary 頻道構建版本。 Dev 與 Canary build 都是開發者預覽版&#xff0c;同屬…

下載和安裝R、RStudio !

現如今&#xff0c;R語言是統計領域廣泛使用的工具&#xff0c;是屬于GNU系統的一個自由、免費、源代碼開放的軟件&#xff0c;是用于統計計算和統計繪圖的優秀工具。而RStudio是R的集成開發環境&#xff0c;用它進行R編程的學習和實踐會更加輕松和方便。下面就教大家如何下載并…

豆瓣首頁話題輸入框的實現

在做問答的時候&#xff0c;遇到一個需求&#xff0c;用戶的問題需要限制字數&#xff0c;不僅顯示計算的超出字數&#xff0c;還需在超出的內容上加一些提醒的效果&#xff0c;例如豆瓣首頁的話題輸入框&#xff0c;抽時間研究了下&#xff0c;需要考慮下面幾個問題&#xff1…

pytorch 吸煙檢測yolov5s

YOLOV5s 吸煙目標檢測 參考學習 文章目錄 本原創項目長期更新&#xff0c;旨在完成校園異常行為實時精檢測&#xff0c;作到集成N次開發優化&#xff08;不止局限于調包&#xff09;為止&#xff0c;近期將不斷更新如下模型數據標注文件教程。關注博主&#xff0c;Star 一下g…

JQuery的ajax函數執行失敗,alert函數彈框一閃而過

先查看<form>標簽是否有action屬性&#xff0c;如果沒有&#xff0c;并且最后<button>標簽的type屬性為submit‘時&#xff0c;默認提交位置就是當前頁面 如果在頁面右鍵檢查&#xff0c;點擊網絡&#xff0c;會在開頭發現這樣的post包&#xff1a; 在右側消息頭處…

C#中Request.ServerVariables詳細說明及代理

Request.ServerVariables("Url") 返回服務器地址Request.ServerVariables("Path_Info") 客戶端提供的路徑信息Request.ServerVariables("Appl_Physical_Path") 與應用程序元數據庫路徑相應的物理路徑Request.ServerVariables("Path_Transla…

coco與voc相互轉化

把LabelImg標注的YOLO格式標簽轉化為VOC格式標簽 和 把VOC格式標簽轉化為YOLO格式標簽 點亮&#xff5e;黑夜 2020-07-07 11:08:24 3537 已收藏 90 分類專欄&#xff1a; 19—目標檢測 文章標簽&#xff1a; voc yolo 版權 把LabelImg標注的YOLO格式標簽轉化為VOC格式標簽 和…

angular中封裝fancyBox(圖片預覽)

首先在官網下載最新版的fancyBox(一定要去最新網站&#xff0c;以前依賴的jquery版本偏低)&#xff0c;附上鏈接&#xff1a;http://fancyapps.com/fancybox/3/ 然后在項目中引用jquery&#xff0c;然后在引用jquery.fancybox.min.css和jquery.fancybox.min.js。 如果需要動畫和…

十二省聯考題解 - JLOI2019 題解

十二省聯考題解 - JLOI2019 題解 兩個T3的難度較大 平均代碼量遠大于去年省選 套路題考查居多 A 難度等級 1 $n^2$暴力可以拿到$60$分的優秀成績 然后可以想到把區間異或轉化為前綴兩點異或 可以想到使用二分答案的方法可持久化Trie解決&#xff0c;但是時間復雜度為$n\log^2 (…

前端vue的get和post請求

vue的get和post需要兩個文件vue.js和vue-resource.js 以下是實現的代碼&#xff0c;可以參考一下&#xff0c;需要注意的接口的請求需要考慮跨域的問題&#xff0c;其次就是訪問頁面需要在tomcat下訪問&#xff0c;否則也會報跨域的問題 <!DOCTYPE html> <html lang&q…

[Vijos 1143]三取方格數

Description 設有N*N的方格圖&#xff0c;我們將其中的某些方格填入正整數&#xff0c; 而其他的方格中放入0。 某人從圖得左上角出發&#xff0c;可以向下走&#xff0c;也可以向右走&#xff0c;直到到達右下角。 在走過的路上&#xff0c;他取走了方格中的數。&#xff08;取…

線掃相機相關規格說明

工業線陣相機與面陣相機特點分析 點滴成海~ 2018-06-29 13:50:38 12184 收藏 29 分類專欄&#xff1a; intership 文章標簽&#xff1a; 視覺元件分析 版權 最近在公司實習&#xff0c;實習中的項目是使用的是微視的一款線陣相機&#xff08;Microview MVC1024DLM-GE35&…