-
코틀린 하다가 자바 기본기가 흔들려 다시 머리식힐겸 정리해놓은 블로그가 있길래 정독중이다.
틀린 부분도 있는데 그냥 그러려니 하고 읽고 있다.
Java 프로그램이 여러 운영체제에서 돌아갈 수 있는 이유 -> Java 프로그램을 돌리는 JVM이 운영체제에 맞게 설계됨
JRE (Java Runtime Environment) : 자바 프로그램을 실행시킬 수 있는 환경
JDK (Java Development Kit) : 자바 개발 도구 + JRE
단항 부호 연산자 +변수, -변수의 산출 타입은 int
산술 연산자
long 타입을 제외한 모든 정수형은 int 타입으로 계산된다.
나머지의 경우 두 피연산자 중 더 큰 타입으로 변환되어 계산된다.
문자열 덧셈의 경우
&&, & (논리 and)
|| | (논리 or)
두개짜리는 앞조건만 평가한 뒤 평가 가능하면 뒤조건 평가하지 않음
switch문의 default는 없어도 된다.
switch문의 조건은 int, String, enum 값 또는 int, String, enum 으로 계산될 수 있는 표현식만 사용할 수 있다.
TestEnum.java
프로그램
public class TestProgram { public static void main(String[] args) { TestEnum what = TestEnum.VALUE1; switch (what) { case VALUE1: System.out.println(TestEnum.VALUE1.name()); break; case VALUE2: System.out.println(TestEnum.VALUE2.name()); break; case VALUE3: System.out.println(TestEnum.VALUE3.name()); break; default: System.out.println("없는 값"); } } }
for each문
for(담겨있는타입 변수선언 : 배열 or Iterable구현객체) { //TODO }
배열
Iterable 구현 객체
또는 메서드 iterator()로 -> Iterator 구현한 객체를 얻어와서 메서드 hasNext, next 로
public static void main(String[] args) { ArrayList<Integer> integerArrayList = new ArrayList<>(5); integerArrayList.add(1); integerArrayList.add(2); integerArrayList.add(3); integerArrayList.add(4); integerArrayList.add(5); // for(초기화; 조건문; 수행코드;){ 반복 } // 초기화 -> 조건문 비교 -> 반복 -> 수행코드 -> 조건문 비교 -> ... for (Iterator<Integer> iterator = integerArrayList.iterator(); iterator.hasNext();) { System.out.println(iterator.next().intValue()); } }
배열, String, 클래스, 인터페이스는 참조 타입
interface TestInterface { } class Person { } public class GenericTest3 { public static void main(String[] args) { // String String str = null; // 클래스 Person person = null; // 인터페이스 TestInterface testInterface = null; // 배열 int[] ints = null; Object[] objs = null; String[] strings = null; Person[] persons = null; } }
배열 짜잘한 문법
1. 선언 , 초기화 문법
2. 배열의 조상 클래스는 Object
public class ArrayCopyTest { public static void main(String[] args) { int[] ia = new int[3]; System.out.println("this class: " + ia.getClass()); System.out.println("super class: " + ia.getClass().getSuperclass()); for (Class<?> c : ia.getClass().getInterfaces()) System.out.println("Superinterface: " + c); } }
3. 자동 up-casting , 타입체크후 down-casting
public class ArrayCopyTest { public static void main(String[] args) { int[] intArray = { 1, 2, 3, 4, 5 }; Object obj = intArray; // (Object)intArray; if (obj instanceof int[]) { obj = (int[]) obj; } } }
4. 다차원 배열
https://steemit.com/coding/@pooh1973/2
5. 복사
int형 배열 복사의 경우
Arrays.copyOf(........)
public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
System.arraycopy(...)
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
배열을 쉽게 조작하도록 도와주는 Arrays 클래스의 배열복사 메서드는 System의 배열복사 메서드로 되어있다.
public class ArrayCopyTest { public static void main(String[] args) { int[] fromArray = {0,1,2,3,4,5,6,7,8,9}; int[] toArray = new int[20]; System.arraycopy(fromArray, 0, toArray, 10, 10); //from의 0번부터 , toArray의 10번부터, 10개를 for(int value: toArray) { System.out.print(value+","); } } }
ArrayStoreException
- from 배열타입이 to 배열타입에 담길 수 없는 경우
IndexOutOfBoundsException
- from 배열 인덱스 넘은 경우, to 배열 인덱스 넘은 경우, 옮기다가 to 배열 인덱스 넘어버려 못옮기는 경우
public class ArrayCopyTest { public static void main(String[] args) { String[] fromArray = new String[10]; for (int i = 0; i < fromArray.length; i++) { fromArray[i] = new String(((Integer) i).toString()); } Object[] toArray = new Object[10]; System.arraycopy(fromArray, 0, toArray, 0, 10); for (Object value : toArray) { System.out.println(value.toString()); } } }
Object 배열에는 모든 클래스 타입 객체를 담을 수 (정확히는 객체 주소값을 가리킬 수) 있으므로 String 배열로 옮기면 예외
public class ArrayCopyTest { public static void main(String[] args) { Object[] fromArray = new Object[10]; for (int i = 0; i < fromArray.length; i++) { fromArray[i] = new Object(); } String[] toArray = new String[10]; System.arraycopy(fromArray, 0, toArray, 0, 10); for (String value : toArray) { System.out.print(value.toString()); } } }
java.lang.ArrayStoreException: arraycopy: element type mismatch: can not cast one of the elements of java.lang.Object[] to the type of the destination array, java.lang.String
객체 배열의 경우
깊은 복사 deep copy
얉은 복사 shallow copy 에 주의해야함
어노테이션
https://kyleyj.tistory.com/22?category=799619
접근 제한자 범위
Public > protected > default > private
protected
같은 패키지에서 어디서나 사용 가능 + 다른 패키지의 경우 자손 클래스 내부만 사용가능
같은 패키지 사용 가능
package protectedmodifier; public class Hello{ protected void method() { System.out.println("sjdflakjd"); } } class Hello2{ void method() { new Hello().method(); //같은 패키지 사용가능 } }
다른 패키지 사용 불가
package anotherpackage; import protectedmodifier.Hello; class Hello2{ void method() { new Hello().method(); //다른 패키지 사용 불가 } }
자손이면 패키지 상관없이 사용 가능하니 사용 가능 유무는 생략
protected 메서드 오버라이딩시 public 또는 protected ( 조상 메서드보다 같거나 넓은 범위로 사용해야함)
package protectedmodifier; public class Hello{ protected void method() { System.out.println("sjdflakjd"); } } class ChildHello extends Hello{ @Override void method() { //default 도 에러 System.out.println("dfalsklkahds"); } }
https://kyleyj.tistory.com/25?category=799619
머리 식힐 때 여기부터 읽자.
'java' 카테고리의 다른 글
[Java] Mac주소 Hex String 변환 (0) 2022.10.28 [Java] String.format (0) 2022.09.07 [Java] 익명 클래스 초기화 블록 (0) 2022.08.25 [Java] Comparator,Comparable구현시 주의할 점 (0) 2022.07.13 [Java] 메모리 stack,heap (0) 2021.05.31