Java十道入門(mén)易踩坑題分析后篇
一,寫(xiě)在前面
本篇主要講類和對(duì)象這一章節(jié)的踩坑題,這一章也相對(duì)復(fù)雜和難理解,面試也是??嫉囊活愵},我分析的都是比較經(jīng)典的,讀者覺(jué)得自己學(xué)習(xí)的不夠扎實(shí),可以收藏,如果覺(jué)得寫(xiě)發(fā)不錯(cuò)的話,求個(gè)免費(fèi)的贊,謝謝!
二,代碼分析
代碼分析①
閱讀如下代碼。 請(qǐng)問(wèn),對(duì)語(yǔ)句行 test.hello(). 描述正確的有()
package NowCoder;
class Test {
public static void hello() {
System.out.println("hello");
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}A.能編譯通過(guò),并正確運(yùn)行
B.因?yàn)槭褂昧宋闯跏蓟淖兞?,所以不能編譯通過(guò)
C.以錯(cuò)誤的方式訪問(wèn)了靜態(tài)方法
D.能編譯通過(guò),但因變量為null,不能正常運(yùn)行


靜態(tài)的方法不依賴于對(duì)象,直接可以調(diào)用類名,雖然test=null,但test不指向任何對(duì)象,可以直接調(diào)用test。選擇A
代碼分析②
下面代碼的運(yùn)行結(jié)果是()
public static void main(String[] args){
String s;
System.out.println("s="+s);
}A.代碼編程成功,并輸出”s=”
B.代碼編譯成功,并輸出”s=null”
C.由于String s沒(méi)有初始化,代碼不能編譯通過(guò)。
D.代碼編譯成功,但捕獲到NullPointException異常

使用局部變量必須初始化,否則會(huì)報(bào)錯(cuò)

如果我們使用成員變量,成員變量將會(huì)賦初值,局部變量使用一定要初始化
class rra{
String s;
public static void main(String[] args) {
rra t = new rra();
System.out.println(t.s);
}
}
選擇D
代碼分析③
如下代碼的輸出結(jié)果是什么?
public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}A.0
B.1
C.2
D.編譯失敗

在方法里面不能定義靜態(tài)的變量,靜態(tài)的變量屬于類變量,不能編譯通過(guò)


選擇D
代碼分析④
當(dāng)你編譯和運(yùn)行下面的代碼時(shí),會(huì)出現(xiàn)下面選項(xiàng)中的哪種情況?
public class Pvf{
static boolean Paddy;
public static void main(String args[]){
System.out.println(Paddy);
}
}A.編譯時(shí)錯(cuò)誤
B.編譯通過(guò)并輸出結(jié)果false
C.編譯通過(guò)并輸出結(jié)果true
D.編譯通過(guò)并輸出結(jié)果null

靜態(tài)成員變量沒(méi)有賦初值,打印false

選擇B
代碼分析⑤
以下代碼運(yùn)行輸出的是
public class Person{
private String name = "Person";
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}A.輸出:Person
B.沒(méi)有輸出
C.編譯出錯(cuò)
D.運(yùn)行出錯(cuò)

被 private 修飾的成員變量或者成員方法, 不能被類的調(diào)用者使用,編譯出錯(cuò)


選擇C
代碼分析⑥
關(guān)于以下程序代碼的說(shuō)明正確的是()
public class HasStatic {// 1
private static int x = 100;// 2
public static void main(String args[]) {// 3
HasStatic hsl = new HasStatic();// 4
hsl.x++;// 5
HasStatic hs2 = new HasStatic();// 6
hs2.x++;// 7
hsl = new HasStatic();// 8
hsl.x++;// 9
HasStatic.x--;// 10
System.out.println(" x=" + x);// 11
}
}A.程序通過(guò)編譯,輸出結(jié)果為:x=102
B.程序通過(guò)編譯,輸出結(jié)果為:x=103
C.10行不能通過(guò)編譯.因?yàn)閤星私有靜態(tài)變量
D.5行不能通過(guò)編譯.因?yàn)橐昧怂接徐o態(tài)變量


一般靜態(tài)變量是用類名訪問(wèn),不能通過(guò)對(duì)象的引用訪問(wèn),但這里是可以這樣寫(xiě)的,編譯器不報(bào)錯(cuò),但不建議這樣寫(xiě)。成員變量被static修飾它在方法區(qū)只有一個(gè),雖然hsl被引用兩次,但x還是原來(lái)的X,所以結(jié)果為102,不管x指向何處,它在方法區(qū)只有一份,選擇A
代碼分析⑦
以下代碼在編譯和運(yùn)行過(guò)程中會(huì)出現(xiàn)什么情況
public class TestDemo{
private int count;
public static void main(String[] args) {
TestDemo test=new TestDemo(88);
System.out.println(test.count);
}
TestDemo(int a) {
count=a;
}
}A.編譯運(yùn)行通過(guò),輸出結(jié)果是88
B.編譯時(shí)錯(cuò)誤,count變量定義的是私有變量
C.編譯時(shí)錯(cuò)誤,System.out.println方法被調(diào)用時(shí)test沒(méi)有被初始化
D.編譯和執(zhí)行時(shí)沒(méi)有輸出結(jié)果


count 初始值為0.new帶有參數(shù)的構(gòu)造方法,a=88,count=88,選擇A
代碼分析⑧
cnt的值是( )
public class Test{
static int cnt = 6;
static{
cnt += 9;
}
public static void main(String[] args){
System.out.println(“cnt =” + cnt);
}
static{
cnt /=3;
};
}A.cnt=5
B. cnt=2
C.cnt=3
D.cnt=6


靜態(tài)代碼塊不管生成多少個(gè)對(duì)象,其只會(huì)執(zhí)行一次,且是最先執(zhí)行的。
靜態(tài)代碼塊執(zhí)行完畢后, 實(shí)例代碼塊(構(gòu)造塊)執(zhí)行,再然后是構(gòu)造函數(shù)執(zhí)行
所以cnt從上到下依次執(zhí)行,選擇A
代碼分析⑨
程序輸出結(jié)果為:
class Test{
public String toString() {
System.out.print("aaa");
return "bbb";
}
}
public static void main(String[] args) {
System.out.println(new Test());
}A.aaa
B.bbb
C.aaabbb
D.bbbaaa
解決這道題先引用一段代碼
class Test{
public String toString() {
System.out.print("aaa");
return "bbb";
}
}
class ss{
public static void main(String[] args) {
Test test = new Test();
System.out.println(test);
System.out.println(new Test());
int a = 10;
System.out.println(a);
System.out.println(10);
}
}

觀察一和二,他們其實(shí)各自對(duì)應(yīng)等價(jià),所以選擇C
代碼分析⑩
如下哪些使用是正確的()
public class Test{
private float f=1.0f;
int m=12;
static int n=1;
public static void main(String args[]){
Test t=new Test();
}
}A.t.a = 1.0
B.this.n
C.Test.m
D.Test.n

由題意知,f和m放在堆區(qū),n在方法區(qū)(靜態(tài)成員變量放在方法區(qū)),f雖然可以引用,但f為浮點(diǎn)型,f=10.0; this不能訪問(wèn)靜態(tài)變量;m為成員變量,要用引用訪問(wèn),不能用類名訪問(wèn);類名可以訪問(wèn)靜態(tài)變量,所以選擇D
到此這篇關(guān)于Java十道入門(mén)易踩坑題分析的文章就介紹到這了,更多相關(guān)Java 踩坑題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JFreeChart動(dòng)態(tài)畫(huà)折線圖的方法
這篇文章主要為大家詳細(xì)介紹了JFreeChart動(dòng)態(tài)畫(huà)折線圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
SpringBoot自定義starter啟動(dòng)器的實(shí)現(xiàn)思路
這篇文章主要介紹了SpringBoot如何自定義starter啟動(dòng)器,通過(guò)starter的自定義過(guò)程,能夠加深大家對(duì)SpringBoot自動(dòng)配置原理的理解,需要的朋友可以參考下2022-10-10
Java的Struts框架中登陸功能的實(shí)現(xiàn)和表單處理器的使用
這篇文章主要介紹了Java的Struts框架中登陸功能的實(shí)現(xiàn)和表單處理器的使用,Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下2015-12-12
JAVA隨機(jī)數(shù)隨機(jī)字母的實(shí)現(xiàn)(微信搶紅包小練習(xí))
這篇文章主要介紹了JAVA隨機(jī)數(shù)隨機(jī)字母的實(shí)現(xiàn)(微信搶紅包小練習(xí)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
swing中Tree與滾動(dòng)條用法實(shí)例分析
這篇文章主要介紹了swing中Tree與滾動(dòng)條用法,以實(shí)例形式分析了java基于swing實(shí)現(xiàn)圖形界面的使用技巧,需要的朋友可以參考下2015-09-09

