更新時間:2022-03-30 10:06:01 來源:動力節(jié)點 瀏覽2161次
Java 中的 main() 是任何 Java 程序的入口點。它總是寫成public static void main(String[] args)。
public:public 是一個訪問修飾符,用于指定誰可以訪問這個方法。Public 意味著任何類都可以訪問此方法。
static:它是 java 中的一個關(guān)鍵字,用于標識它是基于類的。main() 在 Java 中是靜態(tài)的,因此可以在不創(chuàng)建類實例的情況下訪問它。如果 main 不是靜態(tài)的,那么編譯器將拋出一個錯誤,因為在生成任何對象之前,JVM 調(diào)用了main (),并且只能通過類直接調(diào)用靜態(tài)方法。
void:它是方法的返回類型。void 定義不會返回任何值的方法。
main:它是 JVM 搜索的方法的名稱,作為僅具有特定簽名的應(yīng)用程序的起點。它是主要執(zhí)行發(fā)生的方法。
String args[] : 傳遞給main方法的參數(shù)。
Java 被稱為平臺無關(guān),因為它的字節(jié)碼可以在任何系統(tǒng)上運行,而不管其底層操作系統(tǒng)如何。
Java 不是 100% 面向?qū)ο蟮模驗樗褂昧税朔N原始數(shù)據(jù)類型,例如 boolean、byte、char、int、float、double、long、short,它們不是對象。
包裝類將 Java 原語轉(zhuǎn)換為引用類型(對象)。每個原始數(shù)據(jù)類型都有一個專用于它的類。這些被稱為包裝類,因為它們將原始數(shù)據(jù)類型“包裝”到該類的對象中。請參閱下圖,它顯示了不同的原始類型、包裝類和構(gòu)造函數(shù)參數(shù)。
Equals() 方法定義在 Java 的 Object 類中,用于檢查業(yè)務(wù)邏輯定義的兩個對象的相等性。
Java中的“==”或相等運算符是Java編程語言提供的二元運算符,用于比較原語和對象。public boolean equals(Object o)是 Object 類提供的方法。默認實現(xiàn)使用 == 運算符來比較兩個對象。例如:方法可以像 String 類一樣被覆蓋。equals() 方法用于比較兩個對象的值。
Reflection 是一個運行時 API,用于檢查和更改方法、類和接口的行為。Java 反射是一個非常有用的強大工具。Java 反射允許您在運行時分析類、接口、字段和方法,而無需知道它們在編譯時被調(diào)用什么。反射也可用于創(chuàng)建新對象、調(diào)用方法和獲取/設(shè)置字段值??梢酝ㄟ^創(chuàng)建具有完全限定名稱的可擴展性對象的實例來使用外部的、用戶定義的類。調(diào)試器還可以使用反射來檢查類的私有成員。
NonSerialized 屬性可用于防止成員變量被序列化。
如果可能,您還應(yīng)該使可能包含安全敏感數(shù)據(jù)的對象不可序列化。如果必須序列化對象,則將 NonSerialized 屬性應(yīng)用于存儲敏感數(shù)據(jù)的某些字段。如果您不從序列化中排除這些字段,則它們存儲的數(shù)據(jù)將對任何具有序列化權(quán)限的程序可見。
雙大括號初始化是一個 Java 術(shù)語,指的是兩個獨立進程的組合。這里使用了兩個大括號。第一個大括號創(chuàng)建一個匿名內(nèi)部類。第二個大括號是一個初始化塊。當這兩者一起使用時,它被稱為雙括號初始化。內(nèi)部類具有對封閉外部類的引用,通常使用“this”指針。它用于在單個語句中進行創(chuàng)建和初始化。它通常用于初始化集合。它減少了代碼并使其更具可讀性。
String 類的 length() 方法不會返回準確的結(jié)果,因為
它只是考慮了 String 中的字符數(shù)。換言之,BMP(Basic Multilingual Plane)之外的碼點,即U+10000或以上的碼點將被忽略。
其原因是歷史性的。Java 最初的目標之一是將所有文本視為 Unicode。然而,Unicode 當時并沒有在 BMP 之外定義代碼點。在 Unicode 指定此類代碼點時修改 char 為時已晚。
Java 不使用指針,因為它們不安全并增加了程序的復(fù)雜性。由于 Java 以其代碼簡單而著稱,因此添加指針的概念將是矛盾的。此外,由于JVM負責隱式內(nèi)存分配,因此為了避免用戶直接訪問內(nèi)存,Java中不鼓勵使用指針。
JIT 代表 Java 中的即時編譯器。它是一個幫助將 Java 字節(jié)碼轉(zhuǎn)換為直接發(fā)送到處理器的指令的程序。默認情況下,JIT 編譯器在 Java 中啟用,并在調(diào)用 Java 方法時激活。然后,JIT 編譯器將被調(diào)用方法的字節(jié)碼編譯為本機機器碼,“及時”編譯以執(zhí)行。編譯方法后,JVM 直接調(diào)用該方法的編譯代碼,而不是解釋它。這就是為什么它經(jīng)常負責 Java 應(yīng)用程序在運行時的性能優(yōu)化。
雙大括號初始化是一個 Java 術(shù)語,指的是兩個獨立進程的組合。這里使用了兩個大括號。第一個大括號創(chuàng)建一個匿名內(nèi)部類。第二個大括號是一個初始化塊。當這兩者一起使用時,它被稱為雙括號初始化。內(nèi)部類具有對封閉外部類的引用,通常使用“this”指針。它用于在單個語句中進行創(chuàng)建和初始化。它通常用于初始化集合。它減少了代碼并使其更具可讀性。
在 Java 中,構(gòu)造函數(shù)鏈接是相對于當前對象從另一個構(gòu)造函數(shù)調(diào)用的過程。只有通過子類構(gòu)造函數(shù)首先負責調(diào)用超類的構(gòu)造函數(shù)的遺留系統(tǒng)才能實現(xiàn)構(gòu)造函數(shù)鏈接。構(gòu)造函數(shù)鏈中可以有任意數(shù)量的類。構(gòu)造函數(shù)鏈可以通過兩種方式實現(xiàn):
在同一個類中使用 this()
從使用 super() 的基類
在 Java 中,字符串對象本質(zhì)上是不可變的,這意味著一旦創(chuàng)建了字符串對象,它的狀態(tài)就不能被修改。每當您嘗試更新該對象的值而不是更新該特定對象的值時,Java 都會創(chuàng)建一個新的字符串對象。Java String 對象是不可變的,因為 String 對象通常緩存在 String 池中。由于字符串文字通常在多個客戶端之間共享,因此來自一個客戶端的操作可能會影響其余客戶端。它增強了應(yīng)用程序的安全性、緩存、同步和性能。
在 Java 中,運行時多態(tài)性或動態(tài)方法分派是在運行時而不是在編譯時解決對覆蓋方法的調(diào)用的過程。在這個過程中,通過超類的引用變量調(diào)用被覆蓋的方法。讓我們看一下下面的示例以更好地理解它。
class Car {
void run()
{
System.out.println(“car is running”);
}
}
class Audi extends Car {
void run()
{
System.out.prinltn(“Audi is running safely with 100km”);
}
public static void main(String args[])
{
Car b= new Audi(); //upcasting
b.run();
}
}
封裝是一種將數(shù)據(jù)(變量)和代碼(方法)作為一個單元綁定在一起的機制。在這里,數(shù)據(jù)對外界是隱藏的,只能通過當前的類方法訪問。這有助于保護數(shù)據(jù)免受任何不必要的修改。我們可以通過以下方式在 Java 中實現(xiàn)封裝:
將類的變量聲明為私有的。
提供公共的 setter 和 getter 方法來修改和查看變量的值。
組合再次是聚合的一種特殊形式,我們可以將其稱為“死亡”關(guān)系。它是一種強大的聚合類型。子對象沒有生命周期,如果父對象刪除,所有子對象也將被刪除。讓我們再舉一個 House 和 room 之間關(guān)系的例子。房子可以包含多個房間,房間沒有獨立的生命,任何房間不能屬于兩個不同的房子,如果我們刪除房子房間會自動刪除。
Java 中的對象克隆是創(chuàng)建對象的精確副本的過程。它基本上意味著能夠創(chuàng)建與原始對象具有相似狀態(tài)的對象。為了實現(xiàn)這一點,Java 提供了一個方法clone () 來利用這個功能。此方法創(chuàng)建當前對象的類的新實例,然后使用與相應(yīng)字段完全相同的內(nèi)容初始化其所有字段。要對象 clone(),必須實現(xiàn)標記接口java.lang.Cloneable以避免任何運行時異常。您必須注意的一件事是 Object clone() 是一種受保護的方法,因此您需要覆蓋它。
復(fù)制構(gòu)造函數(shù)是一個成員函數(shù),用于使用同一類的另一個對象初始化一個對象。盡管在 Java 中不需要復(fù)制構(gòu)造函數(shù),因為所有對象都是通過引用傳遞的。此外,Java 甚至不支持自動按值傳遞。
Cookie 是服務(wù)器發(fā)送給客戶端的文本數(shù)據(jù),并保存在客戶端本地計算機上。
Servlet API 通過實現(xiàn) Serializable 和 Cloneable 接口的 javax.servlet.http.Cookie 類提供 cookie 支持。
提供了 HttpServletRequest getCookies() 方法來從請求中獲取 Cookies 數(shù)組,由于沒有向請求添加 Cookie 的意義,因此沒有設(shè)置或向請求添加 cookie 的方法。
類似地,提供了 HttpServletResponse addCookie(Cookie c) 方法來在響應(yīng)頭中附加 cookie,cookie 沒有 getter 方法。