Java知識面試題複習(二)Java基礎語法

manor的大數據奮鬥之路 2021-08-15 21:37:11 阅读数:777

本文一共[544]字,预计阅读时长:1分钟~
java java

基礎語法

數據類型

Java有哪些數據類型
定義:Java語言是强類型語言,對於每一種數據都定義了明確的具體的數據類型,在內存中分配了不同大小的內存空間。

分類

基本數據類型
數值型

整數類型(byte,short,int,long) 浮點類型(float,double) 字符型(char) 布爾型(boolean)

引用數據類型

類(class) 接口(interface) 數組([])

Java基本數據類型圖
在這裏插入圖片描述

switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上

在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。從 Java5 開始,Java 中引入了枚舉類型,expr 也可以是 enum 類型,從 Java 7 開始,expr 還可以是字符串(String),但是長整型(long)在目前所有的版本中都是不可以的。

用最有效率的方法計算 2 乘以 8

2 << 3(左移 3 比特相當於乘以 2 的 3 次方,右移 3 比特相當於除以 2 的 3 次方)。

Math.round(11.5) 等於多少?Math.round(-11.5)等於多少
Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數上加 0.5 然後進行下取整。

float f=3.4;是否正確

不正確。3.4 是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要强制類型轉換float f =(float)3.4; 或者寫成 float f =3.4F;。

short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎

對於 short s1 = 1; s1 = s1 + 1;由於 1 是 int 類型,因此 s1+1 運算結果也是 int型,需要强制轉換類型才能賦值給 short 型。

而 short s1 = 1; s1 += 1;可以正確編譯,因為 s1+= 1;相當於 s1 = (short(s1 + 1);其中有隱含的强制類型轉換。

編碼

Java語言采用何種編碼方案?有何特點?

Java語言采用Unicode編碼標准,Unicode(標准碼),它為每個字符制訂了一個唯一的數值,因此在任何的語言,平臺,程序都可以放心的使用。

注釋

什麼Java注釋
定義:用於解釋說明程序的文字

分類

單行注釋
格式: // 注釋文字
多行注釋
格式: /* 注釋文字 /
文檔注釋
格式:/
* 注釋文字 */

作用

在程序中,尤其是複雜的程序中,適當地加入注釋可以增加程序的可讀性,有利於程序的修改、調試和交流。注釋的內容在程序編譯的時候會被忽視,不會產生目標代碼,注釋的部分不會對程序的執行結果產生任何影響。

注意事項:多行和文檔注釋都不能嵌套使用。

訪問修飾符
訪問修飾符 public,private,protected,以及不寫(默認)時的區別
定義:Java中,可以使用訪問修飾符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限。

分類

private : 在同一類內可見。使用對象:變量、方法。 注意:不能修飾類(外部類)
default (即缺省,什麼也不寫,不使用任何關鍵字): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
protected : 對同一包內的類和所有子類可見。使用對象:變量、方法。 注意:不能修飾類(外部類)。
public : 對所有類可見。使用對象:類、接口、變量、方法

訪問修飾符圖

在這裏插入圖片描述

運算符

&和&&的區別

&運算符有兩種用法:(1)按比特與;(2)邏輯與。

&&運算符是短路與運算。邏輯與跟短路與的差別是非常巨大的,雖然二者都要求運算符左右兩端的布爾值都是true 整個錶達式的值才是 true。&&之所以稱為短路運算,是因為如果&&左邊的錶達式的值是 false,右邊的錶達式會被直接短路掉,不會進行運算。

注意:邏輯或運算符(|)和短路或運算符(||)的差別也是如此。

關鍵字

Java 有沒有 goto

goto 是 Java 中的保留字,在目前版本的 Java 中沒有使用。

final 有什麼用?

用於修飾類、屬性和方法;

被final修飾的類不可以被繼承 被final修飾的方法不可以被重寫
被final修飾的變量不可以被改變,被final修飾不可變的是變量的引用,而不是引用指向的內容,引用指向的內容是可以改變的

final finally finalize區別

final可以修飾類、變量、方法,修飾類錶示該類不能被繼承、修飾方法錶示該方法不能被重寫、修飾變量錶
示該變量是一個常量不能被重新賦值。
finally一般作用在try-catch代碼塊中,在處理异常的時候,通常我們將一定要執行的代碼方法finally代碼塊
中,錶示不管是否出現异常,該代碼塊都會執行,一般用來存放一些關閉資源的代碼。
finalize是一個方法,屬於Object類的一個方法,而Object類是所有類的父類,該方法一般由垃圾回收器來調
用,當我們調用System.gc() 方法的時候,由垃圾回收器調用finalize(),回收垃圾,一個對象是否可回收的
最後判斷。

this關鍵字的用法

this是自身的一個對象,代錶對象本身,可以理解為:指向對象本身的一個指針。

this的用法在java中大體可以分為3種:

1.普通的直接引用,this相當於是指向當前對象本身。

2.形參與成員名字重名,用this來區分:

public Person(String name, int age) {

this.name = name;
this.age = age;
}

3.引用本類的構造函數

class Person{

private String name;
private int age;
public Person() {

}
public Person(String name) {

this.name = name;
}
public Person(String name, int age) {

this(name);
this.age = age;
}
}

super關鍵字的用法

super可以理解為是指向自己超(父)類對象的一個指針,而這個超類指的是離自己最近的一個父類。

super也有三種用法:

1.普通的直接引用

與this類似,super相當於是指向當前對象的父類的引用,這樣就可以用super.xxx來引用父類的成員。

2.子類中的成員變量或方法與父類中的成員變量或方法同名時,用super進行區分

class Person{

protected String name;
public Person(String name) {

this.name = name;
}
}
class Student extends Person{

private String name;
public Student(String name, String name1) {

super(name);
this.name = name1;
}
public void getInfo(){

System.out.println(this.name); //Child
System.out.println(super.name); //Father
}
}
public class Test {

public static void main(String[] args) {

Student s1 = new Student("Father","Child");
s1.getInfo();
}
}

3.引用父類構造函數

super(參數):調用父類中的某一個構造函數(應該為構造函數中的第一條語句)。
this(參數):調用本類中另一種形式的構造函數(應該為構造函數中的第一條語句)。

this與super的區別

super: 它引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數據或函數,基類與派生類中有相同成員定義時如:super.變量名 super.成員函數據名(實參)

this:它代錶當前對象名(在程序中易產生二義性之處,應使用this來指明當前對象;如果函數的形參與類中的成員數據同名,這時需用this來指明成員變量名)
super()和this()類似,區別是,super()在子類中調用父類的構造方法,this()在本類內調用本類的其它構造方法。

super()和this()均需放在構造方法內第一行。
盡管可以用this調用一個構造器,但卻不能調用兩個。
this和super不能同時出現在一個構造函數裏面,因為this必然會調用其它的構造函數,其它的構造函數必然也會有super語句的存在,所以在同一個構造函數裏面有相同的語句,就失去了語句的意義,編譯器也不會通過。
this()和super()都指的是對象,所以,均不可以在static環境中使用。
包括:static變量,static方法,static語句塊。
從本質上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。

static存在的主要意義

static的主要意義是在於創建獨立於具體對象的域變量或者方法。以致於即使沒有創建對象,也能使用屬性和調用方法!

static關鍵字還有一個比較關鍵的作用就是 用來形成靜態代碼塊以優化程序性能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被加載的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。

為什麼說static塊可以用來優化程序性能,是因為它的特性:只會在類加載的時候執行一次。因此,很多時候會將一些只需要進行一次的初始化操作都放在static代碼塊中進行。

static的獨特之處

1、被static修飾的變量或者方法是獨立於該類的任何對象,也就是說,這些變量和方法不屬於任何一個實例對象,而是被類的實例對象所共享。

怎麼理解 “被類的實例對象所共享” 這句話呢?就是說,一個類的靜態成員,它是屬於大夥的【大夥指的是這個類的多個對象實例,我們都知道一個類可以創建多個實例!】,所有的類對象共享的,不像成員變量是自個的【自個指的是這個類的單個實例對象】…我覺得我已經講的很通俗了,你明白了咩?

2、在該類被第一次加載的時候,就會去加載被static修飾的部分,而且只在類第一次使用時加載並進行初始化,注意這是第一次用就要初始化,後面根據需要是可以再次賦值的。

3、static變量值在類加載的時候分配空間,以後創建類對象的時候不會重新分配。賦值的話,是可以任意賦值的!

4、被static修飾的變量或者方法是優先於對象存在的,也就是說當一個類加載完畢之後,即便沒有創建對象,也可以去訪問。

static應用場景

因為static是被類的實例對象所共享,因此如果某個成員變量是被所有對象所共享的,那麼這個成員變量就應該定義為靜態變量。

因此比較常見的static應用場景有:

1、修飾成員變量
2、修飾成員方法
3、靜態代碼塊
4、修飾類【只能修飾內部類也就是靜態內部類】
5、靜態導包

static注意事項
1、靜態只能訪問靜態。
2、非靜態既可以訪問非靜態的,也可以訪問靜態的。

流程控制語句
break ,continue ,return 的區別及作用
break 跳出總上一層循環,不再執行循環(結束當前的循環體)

continue 跳出本次循環,繼續執行下次循環(結束正在執行的循環 進入下一個循環條件)

return 程序返回,不再執行下面的代碼(結束當前的方法 直接返回)

在 Java 中,如何跳出當前的多重嵌套循環
在Java中,要想跳出多重循環,可以在外面的循環語句前定義一個標號,然後在裏層循環體的代碼中使用帶有標號的break 語句,即可跳出外層循環。例如:

public static void main(String[] args) {

ok:
for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

System.out.println("i=" + i + ",j=" + j);
if (j == 5) {

break ok;
}
}
}
}

原文鏈接:https://blog.csdn.net/ThinkWon/article/details/104390612

版权声明:本文为[manor的大數據奮鬥之路]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815213646825n.html