【後端面經-Java】Java基本概念

来源:https://www.cnblogs.com/CrazyPixel/archive/2023/07/25/17580759.html
-Advertisement-
Play Games

【不定期更新】本文主要介紹了Java學習前期的一些概念問題,包括“面向對象和麵向過程的區別”、“C++和Java的不同之處”等等,適合初學者學習。 ...


【後端面經-Java】Java基本概念

目錄

1. 面向對象和麵向過程

1.1 概念

  • 面向過程:將一個事件拆分為小步驟,每個步驟封裝為一個函數,通過對函數的線性調用來實現一個大事件;
  • 面向對象:先對一個事件需要用到的實體類進行抽象,封裝成類,通過對類的實例化對象進行操作,實現這個事件過程。特點是:封裝、繼承、多態。

1.2 優缺點對比

如下表所示:

2. C++和Java的區別

從某種意義上,Java是在C++的基礎上,取其精華去其糟粕,進行改進之後得到的一門語言,因此,Java和C++都是面向對象的語言,大量的語法都是相通的,但是既然是C++2.0版本,總是會有所不同的。下麵就來總結一下Java和C++的區別。

2.1 "去其糟粕"——Java同學,你對C++的這些東西有什麼意見?

  • 指針
    大家學習C++的過程中,都被指針折磨過,包括什麼數組指針、指針數組之類的,Java不支持指針,避免了指針越界、指針類型不匹配等問題。
  • 多重繼承
    所謂多重繼承,就是一個子類繼承多個父類(奉先吾兒,是你嗎?)。支持多重繼承對於程式結構來說並不友好,因此Java不支持多重繼承,但是可以通過介面來實現多重繼承的效果。
  • 操作符重載
    C++的操作符重載,指的是一個操作符可以在不同的類中使用重載方式定義不同的含義,Java也不支持操作符重載,避免運算中的模糊性。
  • goto語句
    C++中的goto語句,可以跳轉到任意位置,這樣的話,程式的結構就會變得混亂,Java不支持goto語句。
  • 結構體聯合
    C++能夠使用結構體聯合實現自定義的類型集合,而Java不支持結構體聯合,Java中的數據類型只包括基本數據類型引用數據類型
  • 隱性類型轉換
    C++在運算過程中,不同類型的數據可以進行隱性轉換,而Java不支持隱性類型轉換,需要進行強制類型轉換。
  • 預處理器
    C++使用預處理引入一些庫文件,但是Java並不支持,Java可使用import進行引入,但是import是在編譯階段進行的。
  • 預設參數的函數定義
    C++的函數定義允許預設參數,但是Java不允許。

2.2 改進之處————Java同學,你的這個論文,,,創新點是什麼?

  • 垃圾回收機制
    C++需要程式員手動進行記憶體的申請和釋放,而Java使用垃圾回收機制,自動進行記憶體的申請和釋放,避免了記憶體泄漏的問題。
  • 完全面向對象
    C++是面向對象語言,但是承襲於C語言,依然保留著面向過程的特點,但是Java是完全面向對象的語言,沒有面向過程的特點。
  • 跨平臺——解釋性語言
    C++是編譯型語言,編譯產生可執行文件,程式在不同的平臺上需要重新編譯;Java是解釋性語言,程式在編譯之後,會生成位元組碼文件,這些位元組碼文件可以在不同的平臺上運行。

面試模擬

Q:面向過程和麵向對象的區別是什麼?
A: 面向過程指的是一個功能的實現拆分為多個小步驟,先行調用這些小步驟實現功能,邏輯簡單,適用於小型項目,但是代碼復用率低、維護成本高,不適合大型項目開發,而面向對象則是在功能實現上先抽象出多個類,通過對類的實例化對象進行操作實現功能,復用性高,更容易維護,但是開發較為複雜,且構建類將會占用更大的記憶體空間。

Q:C++和Java的區別
A:Java去除了C++中的指針、多重繼承、結構體、聯合、預處理等容易導致程式複雜性問題的特點,添加了自動垃圾回收機制,可靠性更高,並且Java是完全面向對象的編程語言。此外,C++是編譯型語言,一次編譯只能在當前平臺運行,而Java則是解釋性語言,編譯之後產生的不是可執行文件,而是位元組碼,在不同平臺通過JVM轉換為可執行文件,具有跨平臺性。

參考資料

  1. 面向過程 VS 面向對象
  2. 大神級回答---【面向對象和麵向過程的區別】
  3. Java君與C、C++君的10大區別-總結
  4. C++與Java的區別

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • antv-x6是一個功能強大、可擴展性高的可視化工具,提供了一系列開箱即用的交互軟體和簡單易用的節點定製能力,能夠幫助使用者便捷地創建流程圖、ER圖等交互性較強的應用。本次分享介紹了x6的基本功能,更多高級功能有待我們進一步學習和探索。 ...
  • 高可用的三大利器是熔斷、限流和降級。它們都是在分散式系統中用於保障系統穩定性和可用性的重要策略。熔斷(Circuit Breaker):熔斷是一種防止故障擴散的機制。當一個服務出現故障或超時,熔斷器會打開並快速失敗,拒絕後續的請求,避免請求堆積和資源耗盡。熔斷器會暫時屏蔽該服務,併在一段時間後嘗試恢... ...
  • Docker CLI (命令行界面) 是一個強大的工具,可讓您與 Docker 容器、映像、捲和網路進行交互和管理。它為用戶提供了廣泛的命令,用於在其開發和生產工作流中創建、運行和管理 Docker 容器和其他 Docker 資源。 ### 安裝 要開始使用 Docker CLI,您需要在電腦上安 ...
  • # 未定義行為之 NULL dereference 下麵這段代碼中 `is_valid()` 解引用了空指針 `str`,我們的直覺是編譯運行後將迎來 SIGSEGV,然而事情並非所期望的那樣。 ```c /* * ub_null.c - 未定義行為演示 之 NULL dereference */ ...
  • 本專題寫作的目的其實是分享go語言編程的使用場景,介紹go語言編程的方方面面,讓大家能夠用好這個由google公司發明的強力工具,提升大家在這方面的生產力,畢竟**”君子善假與物也“**嘛。 這裡我先說明一下,我並不是一個對go語言的所有一切都認同的人,你會發現很多相關從業者也會吐槽go語言的“專制 ...
  • # **反射相關使用和暴破** ## **通過反射創建對象** 1. **方式一:**調用類中的public修飾的無參構造器; 2. **方式二:**調用類中的指定構造器; 3. **Class類相關方法:** - newInstance():調用類中的無參構造器,獲取對應類的對象; - getCo ...
  • 原文在[這裡](https://grpc.io/docs/languages/go/basics/)。 本教程為Go程式員提供了使用gRPC的基本介紹。 通過跟隨本示例,你將學會如何: - 在.proto文件中定義一個服務。 - 使用協議緩衝編譯器生成伺服器和客戶端代碼。 - 使用Go gRPC A ...
  • # 反射獲取類的結構信息 1. **關於Class的API** 1. getName:獲取全類名 2. getSimpleName:獲取簡單類名 3. getFields:獲取所有Public修飾的屬性,包含本類及其父類(不僅僅是直接父類) 4. getDeclaredFields:獲取本類中的所有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...