日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java配置出现的问题解释_java SE问题总结(持续更新。。。)

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java配置出现的问题解释_java SE问题总结(持续更新。。。) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

q:安裝的jdk為什么沒有javac.exe文件?

a:JDK和JRE一定不能安裝在同一文件夾中,(jdk自帶的那個jre除外)否則運行的時候會找不到javac命令。 原因:JRE晚于JDK安裝,而JRE只是提供Java運行環境,不需要javac編譯命令的。 JRE安裝前你會發現它會自動刪除一些無關文件,如果同JDK安裝在同一目錄下,原本JDK中完好的javac命令就會被刪除!! 解決方案:重新安裝一次JDK 你會發現系統會安裝兩次文件 第一次的是jdk 第二次的是jre 只要保證你兩次安裝的目錄不是同一個就OK。

另外切記jdk和jre分別裝在不同盤符,這樣也會導致意想不到的驚喜!

q:java環境變量全刪除了怎么java.exe還是能在cmd下執行呢?

a:當在控制臺執行java.exe,操作系統尋找JRE的方式如下:

先找當前目錄下有沒有JRE

再找父目錄下有沒有JRE

接著在PATH路徑中找JRE

注冊表 KEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ 查看 CurrentVersion的鍵值指向哪個JRE

最常用的是在PATH路徑中找JRE,一般情況下,自己的程序運行之前都會先在批處理文件里面臨時設置PATH,把自己用的JRE放到PATH路徑最前面,所以肯定會運行自己帶的JRE,不會造成版本混亂。

也就是說刪除了環境變量,javac.exe是無法編譯的,但是java.exe運行的是jre下的java.exe.

q:編譯出現亂碼怎么破?

a:1.notepad++-->格式-->然后選擇編碼-->ANSI

q:int a =10;long b = 20L; int c =a+b;為什么錯了?

a:無法自動轉換到小的數據類型中,有可能會丟失精度。比如long-->int,int-->byte;

而從小數據類型向大的數據類型轉,可以自由轉換:

q:如下代碼執行結果是什么原因

String s1 = "abc";

String s2 = "abc";

String s3 = "abcabc";

System.out.println(s1==s2); //true

System.out.println(s3==s1+s2); //false

System.out.println(s3=="abc"+"abc"); //true

分析: "abc" 存在字符串常量池中,并且只存在一份,所以s1、 s2指向同一片棧空間中的字符串常量池中的空間,因此第一行true;并且"abc"+"abc"會被編譯器自動優化成"abcabc",生成的字符串同樣存放在字符串常量池中,并且我們知道常量池中只存在一份,因此第三行true。那為什么第二行是false呢,s1、s2是兩個對象相加,而并非字符串,因此結果無法在編譯期確定,因此不放在字符串常量池中,因此地址不相同。

q: 靜態變量,靜態代碼快,屬性,構造方法,靜態方法,普通方法的執行順序是什么?

首先要分開看,我們在使用不同方式初始化類的時候JVM分別做了不同的工作,我們僅以調用靜態方法和new 類的對象兩方面說起:

1> 調用類的靜態方法,比如StringUtil.isEmpty();首先加載靜態變量或者執行靜態代碼塊,并且這項工作只做一次,二者誰寫在前面,先執行誰。然后我們調用了isEmpty靜態方法,才會加載并執行該方法。因此此類執行的順序為: 靜態變量/或者靜態代碼快 --- 靜態方法

2>使用new 初始化對象,首先還是加載靜態變量或者執行靜態代碼塊,如果此項工作已經做過,將不再執行。其次是加載類的屬性,其次構造方法,最后直到調用該對象的某個普通方法才會去加載該方法。因此執行順序為:

靜態變量/或者靜態代碼快 --- 屬性---構造方法---普通方法。

構造方法和普通方法中不能調用靜態變量,靜態方法可以。靜態的東西是類擁有的所有方法共享,只有一份,在靜態方法里調用普通方法或者屬性,必須new出來對象才能用。(個人理解,萬望指正)

q:使用Iterator的next(),sacnner.next()遇到的DT問題解釋:

a:大家看如下代碼有沒有問題:

String name = "tom";

List list = new ArrayList<>();

list.add("tom");

Iterator listIt = list.iterator();

if (listIt.hasNext()) {

if (listIt.next().equals(name)) {

System.out.println(listIt.next());

}

}

相信大家能夠看出來問題所在,沒錯,會爆NoSuchElementException:

原因就是我們在list里加入一個元素,在遍歷的時候調用了兩次listIt的next()方法,這就導致了,判斷的時候調用獲取了"tom",進入if判斷之后,打印又調用一次,第二次調用的時候會去找迭代器的下一個元素,所以報錯。每調用一次,就會獲得當前值的下一個值。正確做法是:

if (listIt.hasNext()) {

String itName = listIt.next();

if (itName.equals(name)) {

System.out.println(itName );

}

}

類似的還有Scanner.next()方法,同理,不再贅述。

q:轉義的時候\n \t \r 都是單斜杠就可以了,為什么用.的時候要\\. 雙斜杠呢?

a:注意用.的時候是在正則表達式中使用的,在正則表達式中 .可以標識任意字符,想僅僅匹配.就必須轉義

(例如郵箱正則表達式)。我們都知道轉義需要\,但是在java中,.并不是特殊字符,可以直接用".",不需

要轉義,而你直接轉義"/."會報錯,在java中需要轉義\,因此用"\\."。

總結

以上是生活随笔為你收集整理的java配置出现的问题解释_java SE问题总结(持续更新。。。)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。