※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.
블록 스코프 이어서 하면,
ㄴ왜 20이 나올까? 블럭 안에서 num값을 20으로 초기화해서 저장되어있기 때문에
ㄴ이건 아예 오류임. 메인블럭 안에 num이란 변수가 있는데 지역블럭 안에 또 num이란 변수를 줬기 때문에
ㄴ블럭 안에 블럭이 있어도 가능
ㄴ이렇게도 가능
ㄴ이렇게는 불가능. num2는 C블럭에서 선언&초기화되고, 출력 후 종료됐기 때문에,
C블럭아래 있는 B블럭의 syso의 num2변수 끌어오기는 될 수 없음
■ 데이터형변환 책36쪽
기본형에서 참조형으로, 참조형에서 기본형으로도 가능
기본형끼리도, 참조형끼리도 변환 가능
2가지
묵시적(=자동,promotion), 명시적
ex) 정수형 : byte -> short -> int -> long 으로, 작은 쪽에서 큰 쪽으로 변형
byte num=10 ; // 작은 용량의 byte를
short a = num ; // 큰 용량의 short로 하는건 '자동'으로 형변환이 됨
ㄴ낚이지 않도록 조심
ㄴ나열해도 헷갈리니까 저렇게 적진 않기..
ㄴ초기화 해주면 출력 가능
★중요 로컬변수와 멤버변수의 특징 꼭 암기하기 이건 꼭 복습
★로컬 변수★
★멤버변수,인스턴수 변수, 전역변수★
■ 참조변수 refVar (데이터형 이미지의 기본값 보기)
ㄴ값이 있는 변수가 아니고, 객체들의 주소가 있는 변수임
ㄴ초기화 안하면 아래 기본값으로 자동초기화 된다는거임
ㄴsyso(refVar) ; 하면 데이터주소를 보여주고
ㄴ refVar . 마침표.를 찍으면 객체 속의 멤버변수 목록이 쫙 뜸
ㄴ refVar는 참조변수이자 로컬변수라서 블록 종료하면 new 클래스명 ( ); 도 사라지는거임!!!
★★★참조변수명 + . ( ) ==> 참조변수가 쓸 수 있는 변수,함수 가져옴★★★
■ class 말고 file 만들기
ㄴ파일 만들고, 파일 안에 [ 홍길동 ] 쳐보면 특이한 형태로 뜸. 그중 홍만 복사해서 class에 붙여넣기
ㄴ한글지원이 안돼서 저렇게 나올 뿐 복붙하면 출력은 잘 나옴...
*아스키코드는 구글링해서 대충 보기
ㄴ아스키코드는 숫자로 되기 때문에 나중에 부등호 연산을 쓸 수가 있음
-큰 타입 데이터+작은 타입 데이터 = 큰 타입 데이터로 자동변경
-★int보다 작은 데이터의 연산결과는 int로 자동 변경됨
ex) 바이트와 바이트를 더해서 10이 나왔다고 치면 이 10은 자동으로 int 10이 됨
그래서 정수-실수의 연산 결과는 무조건 자동으로 실수가 됨
-문자열과 다른 데이터간의 +연산자 사용시, 문자열로 자동변경
ㄴ★문자열 뒤에 숫자가 오면 자동으로 문자열로 변경
ㄴ숫자 나오고 문자 나오면 숫자 먼저 계산되고 뒤에 문자열이 나옴
ㄴ★큰 타입을 작은 타입으로 바꿀때는 명식적으로 기재해야함 =>명시적 형변환
★꼭 기억 : 문자열 변수를 -> 정수형 변수로 변환 후 반환하여, 변수에 저장 후 사용
Int 변수 = Integer.parseInt( 문자열 변수 ) ; ★
String k = "10";
int k2= Integer.parseInt(k);
★꼭 기억 : 정수 변수를 -> 문자열 변수로 변환 후 반환하여 변수에 저장 후 사용
String 변수 = String.valueOf( 정수형 변수 ) ;★
System.out.println(String.valueOf(10)+10);
■ 상수 final 키워드
-값을 변경하지 못하게 하려면 변수를 상수로 선언. 상수값을 변경하려고 하면 컴파일 에러가 발생.
-상수명은 대문자로 표기. 반드시 상수선언시 초기값을 설정해야함.
final 데이터형 상수명 = 초기값;
ex)
final int NUM = 10; //변수명은 전부 대문자. 반드시 초기화 필수
..
NUM = 20; // 상수값을 변경하려고 하면 컴파일 에러가 발생된다.
★워크샵01 복습하기 [문제1] - 복습2번완료(?, 7/19)
3장. 연산자.pdf
우선순위 위주로 알아두기
int x =10 ;
int x2 =x;
x2 += x ; // x2=x2+x ; 와 동일
★자주 사용함, 무조건 오른쪽x에서 + 왼쪽x2으로 읽기
★워크샵01 복습하기 [문제4]
화씨->섭씨
그냥 5/9 하면 이건 int 정수인 0인거임...
5/9f*(fahrenheit -32);
(float)5/9*(fahrenheit -32);
■ 산술연산자
+ , - : 덧셈, 뺄셈
* , / : 곱셈, 나눗셈
% : 나머지 연산자
실수연산의 큰 문제점은 부정확.... ==>BigDecimal클래스 사용해야만 해결 가능
■ 비교연산자
a == b : a가 b와 같은가?
a > b : a가 b보다 큰가?
a >= b : a가 b와 크거나 같은가?
a < b : a가 b보다 작은가?
a <= b : a가 b와 크거나 같은가?
a != b : a가 b와 다른가?
!a : (boolean a가 true면) false
< equals( ) 메서드 : 내용물만 비교!!!>
<내용물의 차이>
char : 해당 변수 안의 값을 직접적으로 가지고 있고 해당 값이 있는 기본데이터형
String : 해당 변수 안의 값을 가지는 게 아니라, 그 값이 들어있는 위치의 좌표를 내용물로 가지는 참조데이터형
char a= 'a' 면 a라는 변수 안에는 a라는 값이 있지만
String abc='abc'는 abc라는 변수 안에는 'abc'가 아니라 'abc'라는 텍스트가 위치한 좌표 "xxxxxxx(임의)' 를 가짐
이 차이점에서 발생하는 것이 ==의 사용가능 여부
char 같은 경우는 값이 같다면 ==를 사용할 수 있지만
String은 내용이 같더라도 String 생성시마다 서로 다른 좌표가 생성되기에 ==를 사용하면 같지 않다는 결과.
★★★이를 위한 해결책 : .equals( ) 를 이용하여 String의 내용물이 실제 같은지를 확인★★★
ㄴ m와 m2는, 실제 내용물이 equals한지?
■ 대입연산자
a = b | b를 a에 저장한다. | |
a += b | a = a + b | a와 b를 더해서 그 값을, 다시 a에 저장 |
a -= b | a = a - b | a와 b를 빼서 그 값을, 다시 a에 저장 |
a *= b | a = a * b | a와 b를 곱해서 그 값을, 다시 a에 저장 |
a /= b | a = a / b | a와 b를 나눠서 그 값을, 다시 a에 저장 |
a %= b | a = a % b | a와 b를 나눈 나머지 그 값을, 다시 a에 저장 |
■ 증감연산자
++n 전치 | n+1하고, 그 n값을 사용 |
--n | n-1하고, 그 n값을 사용 |
n++ 후치 | 먼저 n를 사용하고, n+1 |
n-- | 먼저 n를 사용하고, n-1 |
int x = ++n | n+1하고, 그 n값을 x에 할당(저장) |
int x = n++ | n-1하고, 그 n값을 x에 할당(저장) |
1.전치와 후치의 연산
int a=3;
//++a;
a++;
System.out.println(a);
2.전치
int b=0;
int sum= ++b; // b가 0증가하고, 그 b를 사용
System.out.println("sum : "+sum+" b : "+b); // sum : 1 b : 1
3. 후치
int c=0;
int sum1=c++; // c를 사용하고, c값이 1증가
System.out.println("sum1 : "+sum1+" c : "+c); // sum1 : 0 c : 1
//sum1=c; //0
//c=c+1; // 1
ex)
int y=10;
int y2=++y; //전치: 먼저 증가하고 나중에 할당
// y=y+1; //11
// y2=y; //y2=11과 동일
System.out.println(y+"\t"+y2);
int y3=y++; //후치: 먼저 할당하고 나중에 증가
System.out.println(y+"\t"+y3);
int k=10;
++k;
// k=k+1 //11
System.out.println(k);
k++;
//k=k+1 //위에 11이었고 +1됐으니까 12?
System.out.println(k);
■ 참조변수가 아무것도 참조하고 있지 않는데,
그런 참조변수를 이용해서
NullPointerException
■ 논리연산자
주로 boolean 변수선언&초기화하고, 나중에 연산추출 때 쓰임
ex) ! 같은 경우는 아래와 같이 진짜 많이 쓰임
String name = "홍길동";
if(!name.equals("")) {
System.out.println("name : "+ name);
}
//name : 홍길동
String m= "hello";
String m2="hello";
System.out.println(m==m2); // 이거 안됨!!! 오류!!!
System.out.println(m.equals(m2));
★꼭 기억 - 문자열의 내용비교는 반드시 equals메소드를 사용하여 문자열의 내용비교를 사용할 것★
'Govern > Eclipse SE -설치,문장,배열' 카테고리의 다른 글
07-14(수) 배열, Arrays API (0) | 2021.07.14 |
---|---|
07-13(화) for문,break,continue (0) | 2021.07.13 |
07-12(월) 문장 (0) | 2021.07.12 |
07-08(목) (0) | 2021.07.08 |
07-07(수) 자바 시작 (0) | 2021.07.07 |