1、JDK和JRE:
JDK:java Development Kit:Java開發工具,提供了java開發的工具和運行環境
JRE:java Runtime Environment:java運行環境,提供了java運行的環境需求
我們在開發中,下載JDK一般就包含了JRE,如果只是運行java的話可以只安裝JRE,但是一般情況下,都是安裝JDK就可以。下載好JDK,然後配置好環境變量,這是java開發的第一步
2、javax和java兩個命令
javax:是將java文件編譯成.class結尾的字節碼文件
java:執行字節碼文件
所以說java是跨平臺的語言,可以實現一次編譯,多次運行。
3、float f=1.2;;正確嘛?
不正確,對於float來說,需要後面加上f表示float常量,其實我們可以這樣理解,1.2一般默認情況下是double型數據,將一個double型數據賦值給float型數據肯定會編譯出錯,所以修改的方式有兩種,第一就是float a=1.2f;
或者float f=(float)1.2,強制類型的轉換,說到類型轉換,這邊有必要記一下,數值範圍小的會自動轉換爲數值範圍大的,數值範圍大的要轉爲數值範圍小的就必須強制類型轉換,如:
double a=3;
int a=(int)3.0;
數值範圍從低到高:
byte–>short–>int–>long–>float–>double
4、==和equals()的比較:
對於基本數據類型==就是比較值不是是相同,對於引用類型,比較的就是引用是不是相同,我們來看一段代碼:
String str1="yxc";
String str2="yxc";
String str3=new String("yxc");
System.out.println(str1==str2);//true
System.out.println(str2==str3);//false
System.out.println(str1.equals(str3));//true
通過結果我們可以發現,雖然字符串中的內容都是一樣的,但是比較起來還是有區別的,對於str1和str2,它們都指向常量池中的同一個值,所以引用時相同的,但是對於str3來說,它開闢了新的對象,那麼對象的引用肯定就不一樣了,所以返回false.而對於equeal()方法,其實是因爲string類中重寫了這個方法,比較的是值,所以返回的纔會是true
5、使用equals()方法返回true的兩個對象,那麼他們的hasCode()也相同?
相同:但是反過來說就不一定了,如果兩個對象的hasCode相同,那麼那麼調用的equals()方法的值不一定相同。
6、String類型是基本數據類型嗎?
不是,它是引用類型
7、String類可以被繼承嗎?
不可以,因爲String類是被final修飾的類,不可以被繼承
8、那麼final在java中的作用有哪些?
修飾類:不能被繼承
修飾方法:不能被重寫
修飾變量:必須是常量,不可以改變,而且要有初值。
9、String與其它基本數據類型的相互轉換?
String str="23";
String str2="123.1";
//將字符串轉換爲基本類型,要求字符串中的數據必須是對應數字類型
int a=Integer.parseInt(str);
double d=Double.parseDouble(str2);
System.out.println(a);
System.out.println(d);
//將基本數據類型轉換爲String類型
//要將什麼數據類型轉換爲String類型就在括號內填入值
float f=123.456f;
String str3=String.valueOf(f);
System.out.println(str3);
10、操作字符串的三個類以及他們之間的區別:
String str1 = "123";
StringBuffer str2 = new StringBuffer("123");
StringBuilder str3=new StringBuilder("123");
//System.out.println(str2.equals(str3));//false 類都不相同,比較起來肯定不同
/**
* 其實三者都是操作字符串的類,String創建的是不可變的量,也就是每一次創建以後它的值是不會發生改變
* 而我們平時使用的字符串的拼接+,如果使用String來拼接的話,沒拼接一次就會產生一個新的對象
* 這樣的效率是很低的,所以纔有了後面的兩個類,它們兩個可以在原來的對象中直接修改,也就是我們說的append方法
* 後面兩者的主要區別是:StringBuffer是線程安全的,StringBuilder是線程不安全的,但是效率會很高
* 下面我們通過字符串的拼接來查看時間效率
* 對於後面兩者,其實數據量小的是時候兩者的速度都差不多,都很快,但是當數據量大的時候可以看出StringBuilder時間會短一點
* 對於String的話,效率就很低,需要將近一分鐘的時間。
*/
//測試使用String的時間
//獲取當前時間的毫秒數
long startTime=System.currentTimeMillis();
for(int i=0;i<100000;i++){
str1+=i;
}
long endTime=System.currentTimeMillis();
System.out.println("使用String拼接用時"+(endTime-startTime));
//測試用時StringBuffer的時間
startTime=System.currentTimeMillis();
for(int i=0;i<100000;i++){
str2.append(i);
}
endTime=System.currentTimeMillis();
System.out.println("使用StringBuffer拼接用時"+(endTime-startTime));
//測試使用StringBuilder的時間
startTime=System.currentTimeMillis();
for(int i=0;i<100000;i++){
str3.append(i);
}
endTime=System.currentTimeMillis();
System.out.println("使用StringBuffer拼接用時"+(endTime-startTime));
}
11、如果實現字符串的反轉:
//將字符串進行反轉
String str1 = "abcdefg";
StringBuffer str2 = new StringBuffer("abcd");
StringBuilder str3 = new StringBuilder("abcd");
//對於StringBuffer和StringBuilder來說,通過方法reverse()可以直接實現字符串反轉
StringBuffer reverse = str2.reverse();
StringBuilder reverse1 = str3.reverse();
System.out.println(reverse);
System.out.println(reverse1);
//對於String類的,我們將其轉化爲StringBuffer類或者StringBuilder類
//可以通過構造方法直接轉爲其它兩者類型
StringBuffer str4=new StringBuffer(str1);
StringBuffer reverse2 = str4.reverse();
System.out.println(reverse2);
//順便再將stringBuffer類型轉爲String類型
String s = str4.toString();
12、說說length()方法,length屬性,還有size()方法分別用在什麼情況下?
length()方法用在String類中,length屬性是數組,size()方法是集合中計算長度的
int[] a=new int[10];
String str="yxd123";
List<String> list=new ArrayList<>();
list.add("詹姆斯");
list.add("韋德");
list.add("歐文");
//三種計算長度的方法如下:
System.out.println(str.length());
System.out.println(a.length);
System.out.println(list.size());
13、Math.round(-10.4);等於多少?
//這個最後輸出的是一個長整型數據
//long round = Math.round(-10.9);
//四捨五入對於正數,對於負數的話,也是一樣,但是是在數軸上,我們可以自己畫一個數軸,在靠近那一邊就去哪一邊的值
System.out.println(Math.round(-10.4)); //-10
System.out.println(Math.round(10.4)); //10
//大於這個數的最小整數
System.out.println(Math.ceil(10.9)); //11
System.out.println(Math.ceil(-10.9)); //-10
//小於這個數的最大整數
System.out.println( Math.floor(10.9)); //10
System.out.println(Math.floor(-10.9)); //-11
14、寫出下面代碼的執行結果:
int a1=100;
Integer a=100;
Integer b=100;
int c1=190;
Integer c=190;
Integer d=190;
System.out.println(a1==a);
System.out.println(c1==c);
System.out.println(a==b);
System.out.println(c==d);
答案:
true
true
true
false
對於前面兩個因爲java中有自動裝箱和自動拆箱機制(就是自動將int基本數據類型轉爲Interger類,將Integer類直接轉爲int基本數據類型),但是後面兩個不是一樣的結果呢,我們通過看源碼可以發現,如果Integer數據在-128~127之間的話是不會創建新的對象的,所以使用==就是比較值,而超過上面的範圍以後,就會創建一個新的Integer對象,這樣對象的引用肯定不一樣,所以返回的是false,其它的基本數據類型也是同樣的。
15、用最有效的方法計算2*8;
2<<3
16、switch是否可以作用在byte上,是否可以作用在long上,是否可以作用在String上
當我們在switch()括號內輸入錯誤時,會給出如下提示
Incompatible types. Found: ‘long’, required: ‘char, byte, short, int, Character, Byte, Short, Integer, String, or an enum’,其中String類型是jdk1,7以後支持的
17、&和&&的區別:
//&和&&
System.out.println(4&5);
//4&5做位運算,首先將它們轉爲二進制,然後每一位進行與運算,同時爲1結果才爲1
//&&短路與運算,理論上會將&&兩邊的boolean值都計算出來,但是實際上當左側不滿足條件時,就產生了短路現象,後面的是不會進行判斷的
if(1>2&&2>3){
System.out.println("這句話不會被輸出");
}
18、怎麼將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串?
String str1="新春";
String str2=new String(str1.getBytes("GB2312"),"ISO-8859-1");
System.out.println(str2);
這樣打印的話肯定會出現中文亂碼的嗎,因爲默認情況下ISO-8859-1編碼是不支持中文的。
19、如何獲取當前時間以及以我們希望的格式輸出?
//獲取當前的時間
Date date=new Date();
//按照自己的方式格式化時間
SimpleDateFormat DateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = DateFormat.format(date);
System.out.println(format);
20、如何使用日曆類:
//它是一個接口,所以不能直接通過new或得實例
//下面的cal對象中就包含了現在時間的所有信息。我們可以獲取
Calendar cal=Calendar.getInstance();
//下面通過Calendar類中的常量屬性直接獲取年月日 時分秒 還有很多其它屬性,比如第幾周,這一天是一週的第幾天
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH)+1);
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));