如果你想要旋轉 Windows 畫面可以透過下面的 Shortcut Key:
- Ctrl + Alt + Up Arrow (這是我們一般操作的畫面 開始列在下方)
- Ctrl + Alt + Down Arrow (開始列在上面,畫面上下顛倒)
- Ctrl + Alt + Right Arrow (開始列在右邊)
- Ctrl + Alt + Left Arrow (開始列在左邊)
參考資料:
// 列出目前所有的 JVM 屬性設定 System.getProperties().list(System.out); // 透過 getProperty 單獨取出特定的某個屬性設定值 System.out.println("Color = " + System.getProperty("file.separator")); // 取出我們設定的屬性值,注意屬性名稱是 case sensitive // 如果你寫成 color 得到的會是 null System.out.println("Color = " + System.getProperty("Color")); // 你也可以使用下列方式,當所指定的屬性沒有鍵值時,回傳你所設定的預設值 // 下面的範例當沒有設定 Color 屬性鍵值時會回傳預設的 Pink 值 System.out.println("Color = " + System.getProperty("Color", "Pink")); // 列出目前作業系統所有的環境變數設定 Set<Map.Entry<String, String>> envSet = System.getenv().entrySet(); for (Map.Entry<String, String> set: envSet) { System.out.println(set.getKey() + " = " + set.getValue()); } // 透過 System.getenv(key) 的方式單獨取出你想要的屬性設定 System.out.println("SystemDrive = " + System.getenv("SystemDrive")); System.out.println("TEMP = " + System.getenv("TEMP"));
class Point implements Cloneable { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } // 2. 把 setPoint 移除,讓 Point 變成 immutable 的類別 public void setPoint(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } class Circle { private Point point; private int radius; public Circle(int x, int y, int r) { point = new Point(x, y); radius = r; } public Point getPoint() { return point; } public Point getReadOnlyPoint() { try { // 3. 讓 Point 類別實作 Cloneable,然後回傳 clone 物件 return (Point)point.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } public Point getReadOnlyPoint2() { //1. 使用 new 的方式,將目前的Point 資料拷貝一份 return new Point(point.getX(), point.getY()); } @Override public String toString() { return String.format("(%d, %d) ,radius = %d", point.getX(), point.getY(), radius); } } public class ProtectReferenceObj { public static void main(String[] args) { Circle circle = new Circle(1,1,2); Point pt = circle.getPoint(); System.out.println("Before: " + circle); pt.setPoint(10, 20); System.out.println("After: " + circle); System.out.println("================================"); System.out.println("Before: " + circle); Point pt2 = circle.getReadOnlyPoint(); pt2.setPoint(11, 22); System.out.println("After: " + circle); System.out.println("pt2.x = " + pt2.getX() + " pt2.y = " + pt2.getY()); System.out.println("================================"); System.out.println("Before: " + circle); Point pt3 = circle.getReadOnlyPoint2(); pt3.setPoint(55, 99); System.out.println("After: " + circle); System.out.println("pt3.x = " + pt3.getX() + " pt3.y = " + pt3.getY()); } }
Before: (1, 1) ,radius = 2 After: (10, 20) ,radius = 2 ================================ Before: (10, 20) ,radius = 2 After: (10, 20) ,radius = 2 pt2.x = 11 pt2.y = 22 ================================ Before: (10, 20) ,radius = 2 After: (10, 20) ,radius = 2 pt3.x = 55 pt3.y = 99
public Object[] toArray() { return Arrays.copyOf(elementData, size); } public T[] toArray(T[] a) { if (a.length < size) // Make a new array of a's runtime type, but my contents: return (T[]) Arrays.copyOf(elementData, size, a.getClass()); System.arraycopy(elementData, 0, a, 0, size); if (a.length > size) a[size] = null; return a; }有上面可知,我們有兩個方式可以使用 toarray 方法,一個是不帶任何參數 toarray 方法回傳 Object 陣列,另外一個是回傳你所傳入的型態陣列。
static void toArrayDemo() { ArrayList<integer> list = new ArrayList<integer>(){{ add(1); add(2); add(3); add(4); }}; //"main" java.lang.NullPointerException //Integer[] test = null; //test = list.toArray(test); // or Integer[] test = list.toArray(null); // 配置的元素小於 ArrayList 所存的元素各數少時, // toArray 會幫你重新配置足夠的陣列個數來儲存。 Integer[] test = list.toArray(new Integer[0]); System.out.print("<1>[ "); for (Integer val : test) { System.out.print(val + " "); } System.out.println("]"); // 配置大於 ArrayList 所存的 元素個數,多餘的陣列元素都是 null Integer[] test2 = list.toArray(new Integer[10]); System.out.print("<2>[ "); for (Integer val : test2) { System.out.print(val + " "); } System.out.println("]"); // 配置符合目前 ArrayList 所含的元素個數 Integer[] test3 = list.toArray(new Integer[list.size()]); System.out.print("<3>[ "); for (Integer val : test3) { System.out.print(val + " "); } System.out.println("]"); //無法將 Object 陣列轉成其他型態的陣列 //[Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; //Integer[] test4 = (Integer[] )list.toArray(); Object [] obj = list.toArray(); System.out.print("<4>[ "); for (Object val : obj) { // 你可以對每一個 Object 中的元素轉型成 Integer 型態的物件 // 因為我們宣告的 ArrayList 是儲存 Integer 物件,所以每一個 // Object 物件都是參考到 Integer 物件 System.out.print( ((Integer)val).intValue() + " "); // 下面方式與上面轉型所列印出來的結果相同,因為每一個 Object 元素 // 都是參考到 Integer 物件,而 Integer 的 toString method 就是列印其值。 //System.out.print( val + " "); } System.out.println("]"); }
static void arrayDemo() { Object [] intobj = new Integer[2]; System.out.println("obj instance Integer[] = " + (intobj instanceof Integer[])); obj[0] = new Integer(10); //Exception in thread "main" java.lang.ArrayStoreException: java.lang.Float //obj[1] = new Float(10.f); Object [] obj2 = new Object[2]; System.out.println("obj2 instance Integer[] = " + (obj2 instanceof Integer[])); obj2[0] = new Integer(10); obj2[1] = new Float(10.f); System.out.println("obj2[0] = " + obj2[0] + " , obj2[1] = " + obj2[1]); }
ArrayList<integer> list = new ArrayList<integer>(); list.add(2); list.add(2); list.add(3); list.add(1); list.add(2); System.out.println(list); for (int i=0; i<list.size(); i++){ if(list.get(i)<3) { list.remove(i); } } System.out.println(list);
Iterator<Integer> Allelement = list.iterator(); while (Allelement.hasNext()) { if (Allelement.next() < 3) { Allelement.remove(); // 刪除最後 Iterator 所回傳的值,也就是目前所指到值 } }透過 for 迴圈反向檢查:
for (int i = list.size() - 1; i >= 0; i--) { if(list.get(i) < 3){ list.remove(i); } }
CopyOnWriteArrayList <Integer> list = new CopyOnWriteArrayList <Integer>(); list.add(2); list.add(2); list.add(3); list.add(1); list.add(2); for (Integer val : list) { if (val < 3) { list.remove(val); } }請注意,使用 foreach 去詢訪 ArrayList 時,你不可以在 foreach 中 執行 remove,如果執行了應該會出現 java.util.ConcurrentModificationException 的例外訊息。
// InputDemo.java import java.io.IOException; import java.util.Scanner; public class InputDemo { public static void main(String[] args) throws IOException { OtherInput otherInput = new OtherInput(); int number = -1; Scanner scanner = new Scanner(System.in); // 嘗試執行下列敘述會得到IO例外訊息 //System.out.println("System.in.available()" + System.in.available()); System.out.print("Input a number:"); if (scanner.hasNextInt()) { number = scanner.nextInt(); } scanner.close(); // 因為 scanner.nextInt() 沒有執行,所以 number 為 -1 System.out.println("You input a number " + number); } }
// OtherInput.java import java.util.Scanner; public class OtherInput { public OtherInput() { Scanner scanner = new Scanner(System.in); int age = 0; String name = null; System.out.print("Please input your name:"); if (scanner.hasNextLine()) { name = scanner.nextLine(); } System.out.print("Please input your age:"); if (scanner.hasNextInt()) { age = scanner.nextInt(); } scanner.close(); System.out.println("Your name: " + name + " and age: " + age); } }
Exception in thread "main" java.io.IOException: Stream closed at java.io.BufferedInputStream.getInIfOpen(Unknown Source) at java.io.BufferedInputStream.available(Unknown Source) at InputDemo.main(InputDemo.java:10)
import java.util.Scanner; public class InputDemo { public static void main(String[] args) { int number = -1; Scanner scanner = new Scanner(System.in); System.out.print("Input a number:"); if (scanner.hasNextInt()) { number = scanner.nextInt(); } scanner.close(); System.out.println("You input a number " + number); } }