開篇:自己自學java拖拖拉拉的也有半年了,一學期里有很多事讓我停止學習java,轉眼間開學就要大四找工作了,想用一個暑假好好學習一些java,想掌握一門技術讓自己餓不死。本想每天寫一些筆記總結,發現那樣的話太費時間了,即便寫了,我自己都不看。最後,我決定還是以題的形式寫成文章,方便自己複習,同時也 ...
開篇:自己自學java拖拖拉拉的也有半年了,一學期里有很多事讓我停止學習java,轉眼間開學就要大四找工作了,想用一個暑假好好學習一些java,想掌握一門技術讓自己餓不死。本想每天寫一些筆記總結,發現那樣的話太費時間了,即便寫了,我自己都不看。最後,我決定還是以題的形式寫成文章,方便自己複習,同時也希望能幫助到有緣人。裡面的很多題目來源我收集到的各種資料,並非自己原創。我寫博客只是為了讓自己對知識有很深的理解,理清自己的思路,便於自己複習,並非用於商業用途。若涉及到侵權,請聯繫我,我刪除。
1.簡述String類中的equals方法與Object類中的equals方法的不同點。
答: String類中的equals方法是用來判斷兩個對象的內容是否相同,Object類中的equals方法是用來判斷兩個對象是否是記憶體的同一塊記憶體空間。
2.下列代碼運行結果
public class ToStringTest{ static int i = 1; public static void main(String args[]){ System.out.println("love " + new ToStringTest());//love java ToStringTest a = new ToStringTest(); a.i++; System.out.println("aa " + a.i);//aa 2 } public String toString(){ System.out.print("I ");//I return "java "; } }
I love java
aa 2
原因:當執行代碼的時候,首先載入靜態變數,然後執行main方法,由於main方法內部第一行代碼為輸出語句,裡面new了此類對象,當執行此行代碼時會先創建了本類的對象,由於此類重寫了toString方法,會先執行toString方法的列印輸出,然後返回“java ”,再執行main方法第一行列印輸出。在Java中“System.out.println(類對象名);”實際輸出的是該對象的toString()方法返回的字元串,即括弧中的內容等價於類對象名.toString(),toString方法的好處是在碰到println方法的時候會被自動調用,不用顯示的寫出來。
3.下列代碼運行結果
(1) String s1 = new String("abc"); String s2 = "abc"; System.out.println(s1 == s2); //false System.out.println(s1.equals(s2)); //true (2) String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); //true System.out.println(s1.equals(s2)); //true (3) String s1 = "a" + "b" + "c"; String s2 = "abc"; System.out.println(s1 == s2); //true System.out.println(s1.equals(s2)); //true (4) String s1 = "ab"; String s2 = "abc"; String s3 = s1 + "c"; System.out.println(s3 == s2); //false System.out.println(s3.equals(s2)); //true
4.簡述StringBuilder類與String類的區別。
答:String類的對象內容不可改變,所以每當進行字元串拼接時,總是會在記憶體中創建一個新的對象,所以經常改變內容的字元串最好不要用String,因為每次生成對象都會對系統性能產生影響。
StringBuilder又稱為可變字元序列,是JDK5.0中新增加的一個類,它是一個類似於String的字元串緩衝區,通過某些方法調用可以改變該序列的長度和內容。即它是一個容器,容器中可以裝很多字元串,並且能夠對其中的字元串進行各種操作。它的內部擁有一個數組用來存放字元串內容,進行字元串拼接時,直接在數組中加入新內容,StringBuilder會自動維護數組的擴容。
5.模擬在一副牌中,抽取第1張,第5張,第50張撲克牌。
public class Test3 { public static void main(String[] args) { // 獲取所有撲克牌 String[] puke = getPuke(); // 抽取指定的三種撲克牌 int num1 = 1; int num2 = 5; int num3 = 50; String[] pk3 = get3(puke , num1 ,num2,num3); // 列印抽取的牌 for (int i = 0; i < pk3.length; i++) { System.out.print(pk3[i] + " "); } } private static String[] getPuke() { String[] colors={"黑色","紅桃","梅花","方塊"}; String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; String[] puke = new String[54]; int index = 0; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < colors.length; j++) { puke[index] = colors[j]+nums[i]; index ++; } } puke[52] = "小王"; puke[53] = "大王"; return puke; } public static String[] get3(String[] puke, int i, int i2, int i3) { String[] pk3 = new String[3]; pk3[0] = puke[i - 1]; pk3[1] = puke[i2 - 1]; pk3[2] = puke[i3 - 1]; return pk3; } }
6.獲取當前的日期,並把這個日期轉換為指定格式的字元串,如2088-08-08 08:08:08。
public class DateTest { public static void main(String[] args) { //獲取當前日期對象 now; Date now = new Date(); //創建SimpleDateFormat對象 df,並制定日期格式 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //調用df的format(Date date) 方法,傳入now; 接收返回的字元串 String datestr = df.format(now); //列印這個字元串 System.out.println(datestr); } }
7.使用SimpleDateFormat類,把2018-05-04轉換為2018年05月04日。
public class DateFormatTest { public static void main(String[] args) throws ParseException { //創建SimpleDateFormat對象df1,指定日期模式為yyyy-MM-dd SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd"); //調用df1的parse(String str)方法傳入2018-05-04,得到對應日期類型 Date date = df1.parse("2018-05-04"); //創建日期格式化對象df2,在獲取格式化對象時可以指定風格 DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日"); //調用df2的format(Date date) 傳入剛纔轉換的日期 String str = df2.format(date); System.out.println(str); } }
8.現有一個字元數組{'i','t','c','a','s','a'},請使用System類中的arraycopy()方法在控制台輸出“itcast”。(提示:將[1]號數組元素複製到最後位置並覆蓋原有元素。)
public class ArraycopyTest { public static void main(String[] args) { char[] cha ={'i','t','c','a','s','a'}; //將cha數組中第2個元素,複製到目標數組最後一位數組上 System.arraycopy(cha, 1, cha, 5, 1); //遍歷目標數組,在控制台輸出字元串 for (int i = 0; i < cha.length; i++) { System.out.print(cha[i]); } } }
9.用程式判斷2018年2月14日是星期幾
public class CalendarTest01 { public static void main(String[] args) { //創建Calendar對象 Calendar c = Calendar.getInstance(); //將給定的日曆欄位設置到Calendar對象中 c.set(Calendar.YEAR, 2018); c.set(Calendar.MONTH, 1); c.set(Calendar.DATE, 14); //設置年 int year = c.get(Calendar.YEAR); //設置月 int month = c.get(Calendar.MONTH)+1; //設置日 int date = c.get(Calendar.DATE); //設置星期 char week = getWeek(c.get(Calendar.DAY_OF_WEEK)); //輸出結果 System.out.println(year+"年"+month+"月"+date+"日是星期"+week); } //定義方法,獲取星期漢字 public static char getWeek(int a){ char[] c = {' ','日','一','二','三','四','五','六'}; return c[a]; } }
10.分析以下需求,並用代碼實現:
(1)定義數字字元串數組{"010","3223","666","7890987","123123"};
(2)判斷該數字字元串數組中的數字字元串是否是對稱(第一個數字和最後一個數字相等,第二個數字和倒數第二個數字是相等的,依次類推)的,並逐個輸出;
(3)如:010 是對稱的,3223 是對稱的,123123 不是對稱的;
(4)最終列印該數組中對稱字元串的個數。
public class StringBuilderTest02 { public static void main(String[] args) throws IOException { //定義數字字元串數組 String[] str = {"010","3223","666","7890987","123123"}; SBTest(str); } public static void SBTest(String[] str) { int count = 0; //遍歷定義的字元串數組 for (String string : str) { //創建StringBuilder對象 StringBuilder sb = new StringBuilder(string); //調用reverse()方法,將遍歷的數字進行反轉,然後用equals()方法對比是否與原數字相同 if (sb.reverse().toString().equals(string)) { count++; System.out.println(string + "是對稱的"); } } System.out.println("總數為" + count); } }