까먹은 것들 정리
코틀린 하다가 자바 기본기가 흔들려 다시 머리식힐겸 정리해놓은 블로그가 있길래 정독중이다.
틀린 부분도 있는데 그냥 그러려니 하고 읽고 있다.
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
머리 식힐 때 여기부터 읽자.