Scanner
- 자바에서 콘솔입력을 할때 많이 쓰는 클래스이다.
콘솔입력을 받을 때 예시 코드를 보여주면
Scanner sc = new Scanner(System.in);
String spell = sc.nextLine();
여기서 Scanner 객체의 메소드들이 중요하다.
이렇게 입력받고자하는 자료형에 따라 입력 메소드를 다르게 줘야한다..
후.. 킹받네? 파이썬은 안그런데.. 그냥 때려넣으면 다알아서 알아듣는 천재 언어인데.. 후
자료형의 종류
- 자료형은 변수에 저장되는 값에 따라 두종류로 나누어진다.
기본형 vs 참조형
기본형은 말그대로 해당 자료형의 변수에 값자체를 보관하고
참조형은 해당 자료형의 변수에 값이 보관되어 있는 영역의 주소를 가르킨다.
int i = 4;
i 는 4라는 값을 가지고 있고
Person person = new Person();
person은 Person 객체가 있는 영역의 주소를 가지고 있다.
따라서 이차이는
int a = i; 라고 할때 a에는 4라는 값이 들어가서 상관없지만 (깊은복사)
Person a = new Person();
a = person;
a와 person은 같은 객체의 주소를 가지고 있기때문에 a와 i모두
같은 객체를 가르키게 된다. 즉, (얕은 복사)가 된다.
마찬가지로 배열또한 객체로 분류되기때문에 이와같이 얕은복사가 이루어진다.
int[] a = new int[3];
int[] b = a;
a[0] = 1;
b[0] = 2;
System.out.println(a[0]);
System.out.println(b[0]);
2
2
null
- null은 java에서 비어있음을 뜻한다. 이러한 단어는 참조형 자료형에서 밖에 사용 할 수가 없다.
- null을 포함한 참조형 변수를 호출한다면
Person p1 = null;
p1.getName();
Exception in thread "main" java.lang.NullPointerException
이렇게 아래 와 같이 널포인터 익셉션이라는 에러 메세지를 볼수 있다.
Person[] people = new Person[5];
people[0] = new Person("김신의", 28);
people[2] = new Person("문종모", 26);
people[3] = new Person("서혜린", 21);
for (int i = 0; i < people.length; i++) {
Person p = people[i];
System.out.println(p.getName());
}
위 코드는 people[1], people[4] 가 null 을 포함하고 있기 때문에 출력호출을 하면 널포인트 에러메시지가 나온다.
이러한 것을 대처하는 방법은 먼저 null변수인지 아닌지 확인 하는것이다.
Person[] people = new Person[5];
people[0] = new Person("김신의", 28);
people[2] = new Person("문종모", 26);
people[3] = new Person("서혜린", 21);
for (int i = 0; i < people.length; i++) {
Person p = people[i];
if (p != null) {
System.out.println(p.getName());
} else {
System.out.println(i + "번 자리는 비었습니다.");
}
}
String s = null;
if (s != null || !s.isEmpty()) {
System.out.println("Answer A");
} else {
System.out.println("Answer B");
}
위 코드를 보면 어떤 결과가 나올까?
먼저 s != null 은 false이다.
!s.isEmpty() 는 s.isEmpty()라는 메소드에서 s라는 null을 포함한 참조형 변수를 호출한 것이기 때문에
nullPointerException이 일어나게된다.
* 참고로 or , and 연산에서
String s = null;
if (s != null || !s.isEmpty()) {
System.out.println("Answer A");
} else {
System.out.println("Answer B");
}
or은 맨 앞의 연산이 true일 경우 뒷연산을 하지 않고 바로 true을 낸다.
and는 맨앞의 연산이 false일 경우 뒷연산을 하지 않고 바로 false를 낸다.
final
- 위 키워드를 쓰면 변수를 상수로 만들 수 있다.
final double pi = 3.141592;
pi = 2.54;
한번 이렇게 값을 final로 지정해두면 변경이 불가능하다.
위코드 같은 경우에는 final 변수이므로 변경이 불가능하다는 에러메세지가 뜨게됩니다.
변수를 안전하게 변경이 불가능하도록 보호하기 위해서 사용합니다.
'Programming language > Java' 카테고리의 다른 글
Java - 7 [클래스 메소드 - 인스턴스 메소드, String 클래스, Math, Random] (2) | 2020.10.17 |
---|---|
Java - 6 [try - catch, 인스턴스 변수 - 클래스 변수] (0) | 2020.10.17 |
Java - 5 [생성자, this] (0) | 2020.10.16 |
Java - IntelliJ Live template (0) | 2020.10.14 |
Java - 4 [Class, 접근제어자] (0) | 2020.10.14 |