ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 까먹은 것들 정리
    java 2021. 12. 25. 02:57

    코틀린 하다가 자바 기본기가 흔들려 다시 머리식힐겸 정리해놓은 블로그가 있길래 정독중이다.

    틀린 부분도 있는데 그냥 그러려니 하고 읽고 있다.

     

    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;
    	}
    }

    https://doohong.github.io/2018/03/04/java-string-pool/


    배열 짜잘한 문법

     

    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

     

    자바 2차원 배열 — Steemit

    2차원 배열의 개념이해 2차원 정방형 배열 2차원 정방형 배열 연습 2차원 비 정방형 배열 -2차원 비 정방형 배열 연습 배열연습문재 // 정수형 2차원배열 score int[][] score = { {85, 60, 70}, {90, 95, 80}, {75,

    steemit.com

     

    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 

     

    [Java]STEP1 - 10) 어노테이션(Annotation)

    본 게시글은 도서 "이것이 자바다" 동영상 강의를 듣고 기록하는 TIL(Today I Learned) 입니다. 모든 저작권은 출판사 한빛미디어와 신용권님께 있음을 알립니다.👍 이번 게시물에서는 자바의 메타데

    kyleyj.tistory.com


    접근 제한자 범위 

     

    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]STEP1 - 13) 인터페이스(Interface)

    본 게시글은 도서 "이것이 자바다" 동영상 강의를 듣고 기록하는 TIL(Today I Learned) 입니다. 모든 저작권은 출판사 한빛미디어와 신용권님께 있음을 알립니다.👍 이번 게시글에서는 자바의 인터페

    kyleyj.tistory.com

    머리 식힐 때 여기부터 읽자.

    '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

    댓글

Designed by Tistory.