本文目錄一覽:
- 1、Java中的一些問題
- 2、java問題
- 3、java疑難問題
- 4、解答一下有關JAVA異常類的問題?
- 5、Java問題
- 6、java面試中經常被問到的問題有哪些?
Java中的一些問題
1.定義變數時至少應指出變數名和類型嗎?
答:必須給出名稱和類型。
2.定義變數時沒有給出初值,該變數可能是無意義的值嗎??
答:類的成員變數會給出默認值,基本數據類型會是0,對象是null。局部變數不可以沒有初始值
3.定義變數同一個類型,多個變數可用逗號分隔嗎?
答:可以。
4.定義變數時必須要給變數初始化嗎??
答:成員變數可以不必初始化,局部變數一定要初始化。
5.定義變數而沒初始化時,該變數與默認值嗎??
答:成員變數有初始值,局部變數沒有
6.字元型變數的默認值為換行符嗎?
答:是
7.布爾型變數的默認值為真嗎?
答:false
8.變數的默認值是可以改變的嗎??
答:可以改變。
java問題
這裡直接把s賦值給readContent是有問題的,問題點如下:
假設文件有兩行
第一行
第二行
則讀取循環兩次,第一次s賦值給readContent,readContent的值為 “第一行”,然後又循環,讀取第二行,再次賦值,則readContent就會變成 “第二行”,第一行的值就丟失了;
這裡StringBuff的作用是把讀取到的內容連接起來成為一個字元串;
不過這裡的例子的確有問題,問題卻不在StringBuffer上,而在 s 變數上,s中間兩步是不必要的,循環內直接改成如下形式:
刪除s.getBytes()和new String
另外,除了以上問題,來總結下這段代碼的問題吧:
1、文件資源沒有釋放
2、在不涉及多線程的情況下,應使用StringBuilder類進行字元串拼接,而不是StringBuffer,因為StringBuilder更快(但是StringBuilder線程不安全,StringBuffer線程安全);
3、異常處理有問題,如果出現IO異常,就返回異常信息的字元串?那麼如何區分這個字元串是發生了異常還是從文件中讀取到的內容呢?這裡不應該返回字元串,而是直接聲明異常,有異常就向外拋,直到能處理的頂層程序處理。
基於以上幾點,修改代碼如下:
注意第27行,聲明本方法可能拋出 IOException 異常,稍後主程序將進行處理。另外注意第30行,創建InputStreamReader 的時候指定了文件編碼為utf8,以避免亂碼,你的文件如果存儲的是其他編碼類型,則會出現亂碼。
調用代碼如下:
getContent函數調用主程序
注意18行和21行,是分別處理正常情況和異常情況,當讀取異常時,將會調用第21行,列印異常信息;
整體代碼如下:
全部代碼
接下來我們看看代碼執行情況。
1、當我們要讀的文件不存在時,執行結果如下:
我們要讀的文件不存在時,拋出異常
看,當文件不存在時,拋出異常,並由異常處理程序捕獲和列印,你可以看到具體哪一行代碼出錯[getContent(App.java:29)],說明在App.java 文件中的getContent方法,文件的29行出錯。
2、那麼正常情況下呢?當然是輸出文件內容了,我們放一個有如下內容的文件在”D:\\file.txt”處:
要讀取的文件內容
執行結果如下:
正常情況下,輸出文件內容
最後,我不知道你看的是什麼書,是不是課本,但感覺質量不高,這裡給你推薦幾本,可以買來看看:
1、Head First java
2、菜鳥教程 Java
3、最權威的,自然是The Java® Language Specificati了
祝你學習之路順利
java疑難問題
最後一題
計算的結果是
94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313
代碼
import java.math.BigInteger;
public class Main
{
public static void main (String[] args)
{
BigInteger sum = new BigInteger(“0”);
for (int i = 1; i = 100; i++)
{
sum = sum.add(fun(i));
}
System.out.println(sum);
}
private static BigInteger fun(int times)
{
BigInteger bi = new BigInteger(“1”);
for (int i = 2; i = times; i++)
{
bi = bi.multiply(new BigInteger(String.valueOf(i)));
}
return bi;
}
}
其他的你分開問,一次太多了
解答一下有關JAVA異常類的問題?
問題(1)可以改為Exception
問題(2)示情況而定是否可以改為IOException
原因,原語句中的try…catch..的語義是在try裡面的兩行語句中捕獲可能拋出的DangerException異常並加以處理,
(1). Exception是DangerException的父類,替換後語義變為了在try裡面的兩行語句中捕獲可能拋出的Exception異常並加以處理,語義是正確的;
(2). IOException不確定是不是DangerException的父類,替換後語義變為了在try裡面的兩行語句中捕獲可能拋出的IOException異常並加以處理,語義不一定正確,如果IOException是DangerException的父類,就是正確的,否則是錯誤的(在try裡面沒有IOException的類型可能被拋出),在編譯時會報錯(Exception ‘java.io.IOException’ is never thrown in the corresponding try block)
Java問題
這裡直接把s賦值給readContent是有問題的,問題點如下:
假設文件有兩行
第一行
第二行
則讀取循環兩次,第一次s賦值給readContent,readContent的值為 “第一行”,然後又循環,讀取第二行,再次賦值,則readContent就會變成 “第二行”,第一行的值就丟失了;
這裡StringBuff的作用是把讀取到的內容連接起來成為一個字元串;
不過這裡的例子的確有問題,問題卻不在StringBuffer上,而在 s 變數上,s中間兩步是不必要的,循環內直接改成如下形式:
刪除s.getBytes()和new String
另外,除了以上問題,來總結下這段代碼的問題吧:
1、文件資源沒有釋放
2、在不涉及多線程的情況下,應使用StringBuilder類進行字元串拼接,而不是StringBuffer,因為StringBuilder更快(但是StringBuilder線程不安全,StringBuffer線程安全);
3、異常處理有問題,如果出現IO異常,就返回異常信息的字元串?那麼如何區分這個字元串是發生了異常還是從文件中讀取到的內容呢?這裡不應該返回字元串,而是直接聲明異常,有異常就向外拋,直到能處理的頂層程序處理。
基於以上幾點,修改代碼如下:
注意第27行,聲明本方法可能拋出 IOException 異常,稍後主程序將進行處理。另外注意第30行,創建InputStreamReader 的時候指定了文件編碼為utf8,以避免亂碼,你的文件如果存儲的是其他編碼類型,則會出現亂碼。
調用代碼如下:
getContent函數調用主程序
注意18行和21行,是分別處理正常情況和異常情況,當讀取異常時,將會調用第21行,列印異常信息;
整體代碼如下:
全部代碼
接下來我們看看代碼執行情況。
1、當我們要讀的文件不存在時,執行結果如下:
我們要讀的文件不存在時,拋出異常
看,當文件不存在時,拋出異常,並由異常處理程序捕獲和列印,你可以看到具體哪一行代碼出錯[getContent(App.java:29)],說明在App.java 文件中的getContent方法,文件的29行出錯。
2、那麼正常情況下呢?當然是輸出文件內容了,我們放一個有如下內容的文件在”D:\\file.txt”處:
要讀取的文件內容
執行結果如下:
正常情況下,輸出文件內容
最後,我不知道你看的是什麼書,是不是課本,但感覺質量不高,這裡給你推薦幾本,可以買來看看:
1、Head First java
2、菜鳥教程 Java
3、最權威的,自然是The Java® Language Specificati了
祝你學習之路順利
java面試中經常被問到的問題有哪些?
java面試中經常被問到的問題有如下:
1、簡述string對象,StringBuffer、StringBuilder區分。
2、多態的原理。
3、簡要描述面向對象編程的思想。
4、反射的原理。
5、java.util包的UML結構圖。
6、Vector和ArrayList、LinkedList區別。
7、Hashtable和HashMap之間的區別。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/233831.html