java点_java常见基础点
1. 重載與重寫
重載:發生在同一個類中,方法名必須相同,參數類型不同、個數不同、順序不同,方法返回值和訪問修飾符可不同。
重寫:子類對父類允許訪問的方法重新編寫,方法名參數列表必須相同,返回值范圍小于等于父類,拋出的異常范圍小于等于父類,修飾符范圍大于等于父類,若父類方法為private,子類不能重寫。
注:構造器不能被重寫,重寫意味著發生了繼承,子類重寫父類的方法,然而構造器的方法名必須與類名相同,顯而易見的是,子類和父類的類名一定不相同,所以構造器不可被重寫。
2. final
修飾的類,為最終類,不能被繼承。如String 類,類中所有成員方法被隱式指定為final方法
修飾的方法可以被繼承和重載,但不能被重寫
修飾的變量如果是基本類型,則是個常量,不能被修改,若是引用類型,初始化后不能引用其他對象,但被引用對象本身是可以修改的。
final A y = new A();
y.a = 1;
3. OOP特點:
這是一種“萬物皆對象”的編程思想。在現實生活中的任何物體都可以歸為一類事物,而每一個個體都是一類事物的實例。
三大特性:封裝、繼承、多態
封裝:將一個對象的屬性私有化,同時提供一些可以被外界訪問問的屬性的方法
繼承:使用已存在的類的定義作為基礎建立新類,新類可增加新的數據和功能,可以用父類的功能,但不能選擇性的繼承父類。
多態:同一個行為有多種表現形式,程序中定義的引用變量所指向的具體類型在編譯時不確定,而是在運行期間,該引用變量到底指向哪個類的實例變量。
4. “面向過程”和“面向對象”的區別
面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現;面向對象是把問題分解成各個對象,去描敘某個對象在整個過程中的行為。
舉例說明:五子棋
面向過程:
1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟 2,9、輸出最后結果。每個步驟用不同的方法來實現。
面向對象:
整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對 象(玩家對象)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,之后在屏幕上面顯示出這種變化,同時利用 第三類對象(規則系統)來對棋局進行判定。
5. 抽象和接口:均不可被實例化
a) 接口中所有方法隱含都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
b) 類可以實現很多個接口,但是只能繼承一個抽象類
c) Java接口中的成員變量默認都是final static 。
d) Java接口中的方法默認是public的。所有方法在接口中不能有實現(JDK8之后可默認實現)
e) JDK8之后,接口可定義默認方法,JDK9之后,接口可定義私有方法。
6. 動態綁定和靜態綁定
綁定指的是一個方法的調用與方法所在的類(方法主體)關聯起來。
靜態綁定:
在編譯過程中就已經知道這個方法到底是哪個類中的方法,java當中的方法只有final,static,private和構造方法是前期綁定。
動態綁定:
在運行時根據具體對象的類型進行綁定,只適用于方法,若要訪問子類中與父類相同的屬性值,可在子類中添加一個get方法。
7. 深拷貝與淺拷貝
淺拷貝:對基本數據類型進行值傳遞,對引用數據類型進行引用傳遞般的拷貝。
深拷貝:對基本數據類型進行值傳遞,對引用數據類型,創建一個新的對象,并復制其內容。
8. JDK、JRE、JVM的區別與聯系
JDK :(Java Development Kit),Java 開發工具包。jdk 是整個 Java 開發的核心,擁有 JRE 所擁有的一切,還有編譯器(javac)和工具(如 javadoc 和 jdb)。能夠創建和編譯程序。
JRE :(Java Runtime Environment)Java 運行時環境。它主要包含兩個部分,jvm 和 Java 的一些基本類庫。用來運行已編譯 Java 程序所需內容的集合。
JVM :只認識 xxx.class 類型的文件,能夠將 class 文件中的字節碼指令進行識別并調用操作系統的 API 完成動作,是 Java 能夠跨平臺的核心。
9.Java 為什么能跨平臺,實現一次編寫,多處運行?
java文件編譯成二進制字節碼的class文件,jvm解釋執行class文件。不同的系統上安裝有不同的Java虛擬機(JVM),由JVM來把字節碼再“翻譯”成所對應系統能夠執行的代碼。因此不需要考慮硬件平臺是什么。java是運行在jvm上的,所以它的代碼就能不經修改,就能在不同平臺的jvm上運行。
9 . == 與 equals
hashCode()與equals()的相關規定:
如果兩個對象相等,則hashcode一定也是相同的
兩個對象相等,對兩個equals方法返回true
兩個對象有相同的hashcode值,它們也不一定是相等的
綜上,equals方法被覆蓋過,則hashCode方法也必須被覆蓋
hashCode()的默認行為是對堆上的對象產生獨特值。如果沒有重寫hashCode(),則該class的兩個對象無論如何都不會相等(即使這兩個對象指向相同的數據)。
==與equals的區別
==是判斷兩個變量或實例是不是指向同一個內存空間 equals是判斷兩個變量或實例所指向的內存空間的值是不是相同
==是指對內存地址進行比較 equals()是對字符串的內容進行比較
10. Java中的裝箱和拆箱:Integer 等包裝類不能被繼承
裝箱:自動將基本數據類型轉換為包裝器類型,是通過調用包裝器的valueOf方法實現的,
拆箱:自動將包裝器類型轉換為基本數據類型,是通過調用包裝器的 xxxValue方法實現的。(xxx代表對應的基本數據類型)。
例如:
Integer i = new Integer(xxx) 和 Integer i =xxx;這兩種方式的區別。
i)第一種方式不會觸發自動裝箱的過程;而第二種方式會觸發;
ii)第二種方式等同于Integer.valueOf(123) ,會使用緩存池中的對象,多次調用會取得同一個對象的引用。
11. JAVA只有值傳遞
按值調用表示方法接收的是調用者提供的值。
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
swap(num1, num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
}
結果:
a = 20、b = 10
num1 = 10、num2 = 20
12. 靜態內部類與普通內部類的區別
是否含有靜態屬性
普通內部類只能通過外部類的對象來訪問,所以不能定義各種靜態成員。
訪問外部成員
靜態內部類只能直接訪問外部類的靜態成員, 若要訪問非靜態屬性,必須通過外部類的對象訪問
非靜態內部類可直接訪問外部類的所有成員。
外部類訪問內部類
假設類A有靜態內部類B和非靜態內部類C,創建B和C的區別為:
A.B b =newA.B(); A.C c =newA().newC();
13. C++與java
java程編寫一次代碼,到處運行,都是生成字節碼,在JVM里面運行得到結果,可移植性強。
java沒有指針,編寫效率高
java可自動回收
C++通常適合那些需要“硬件級”操作的軟件。二者之間的最大區別在于,C++更接近機器語言,因此其軟件運行速度更快且能夠直接與計算機內存、磁盤、CPU或者其它設備進行協作。
總結
以上是生活随笔為你收集整理的java点_java常见基础点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10 C盘空间越来越小怎么办
- 下一篇: dw中html颜色的设置颜色代码,Dre