에러명 : the selection did not contain any resources that can run on a server
해당 프로젝트 우클릭후 들어가준다.
다음과 같이 [Project Facets] 에서 Dynamic Web Module 체크 후 저장해준다.
에러명 : the selection did not contain any resources that can run on a server
해당 프로젝트 우클릭후 들어가준다.
다음과 같이 [Project Facets] 에서 Dynamic Web Module 체크 후 저장해준다.
상속이란 ?
자식 클래스는 부모 클래스에서 정의된 변수나 메소드를 자기 자신 것처럼 사용할 수 있다.
상속 형태
class 부모클래스명 { 변수; 메소드; }
clasee 자식클래스명 extends 부모클래스명 { 실행할 문장; } |
오버라이딩
- 부모로부터 상속받은 메소드를 자식 클래스에서 자기 자신 클래스의 기능에 맞도록 재정의하는 기능
바로 예시로 들어가보겠습니다
동일 패키지에 존재한다는 가정하에 클래스 파일을 분리해서 만들었습니다.
부모클래스
GrandF.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class GrandF {
public String name = "홍길동할아버지";
protected String gahun = "열심히하자";
public GrandF() {
System.out.println("할아버지 생성자입니다");
}
public void say() {
System.out.println("할아버지가 말씀하셨다.");
}
}
|
3-4번 줄 : name과 gahun이라는 변수명과 변수 값을 정해줍니다. 6-7번 줄 : 생성자를 한번 더 복습해보았습니다. 10-11번 줄 : say라는 메소드를 생성해주었습니다. |
자식클래스
gajok.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class Fatherr extends GrandF {
public String gabo = "지역변수"; // 은닉화
public Fatherr() {
super(); // 부모 생성자 호출. 아규먼트에의해 선택적으로 호출
}
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("자바 공부를 합시다");
}
public void showData() {
String gabo = "멤버변수";
System.out.println("gabo : " + gabo); // 멤버변수
System.out.println("gabo : " + this.gabo); // 지역변수
System.out.println("gabo : " + super.name);
}
public static void main(String[] args) {
Fatherr fa1 = new Fatherr();
fa1.showData();
}
}
|
5번 줄 : GrandF 클래스를 gr이라는 새로운 객체로 생성해준다. 6번 줄 : super()는 부모 클래스의 생성자를 호출하기때문에 "할아버지 생성자"를 호출합니다. 10번 줄 : 기존 부모클래스에서 "할아버지가 말씀하셨다"를 호출해야하지만 자식클래스에서 상속을 받았기 때문에 "자바 공부를 합시다"가 출력됩니다. 16번 줄 : 변수별로 어떤 차이점을 가지는지 보여주기위해 작성하였습니다. 28번 줄 : 오버라이딩한 내용을 출력합니다.
|
8 - 생성자(Constructor) (0) | 2020.03.04 |
---|---|
7 - 메소드 (0) | 2020.03.04 |
6 - 클래스 ( class ) (0) | 2020.03.03 |
5 - 배열(Arrary) (0) | 2020.03.03 |
4 - 조건문 if & switch (0) | 2020.03.03 |
생성자란?
new 연산자에 의해서 객체 생성시 항상 실행하는 것으로, 객체 초기화시에 사용된다.
특징
- 객체를 생성할 때 멤버 변수의 값을 쉽게 초기화하기 위함이다.
- 클래스 이름과 동일하다.
- 클래스에 인자 있는 생성자를 정의하고, 빈 생성자도 같이 사용하고 싶다면 반드시 정의해주어야 한다.
- 하나의 클래스 안에 여러개의 생성자를 정의할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
class ProDuctions {
String name;
int price;
public ProDuctions() {
// TODO Auto-generated constructor stub
}
public ProDuctions(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public ProDuctions(int price) {
// TODO Auto-generated constructor stub
this.price = price;
}
public ProDuctions(String name, int price) {
// TODO Auto-generated constructor stub
this.name = name;
this.price = price;
}
}
public class ProductionMain {
public static void main(String[] args) {
ProDuctions pd = new ProDuctions();
ProDuctions pd1 = new ProDuctions("감자");
ProDuctions pd2 = new ProDuctions(50000);
ProDuctions pd3 = new ProDuctions("고구마", 123456);
}
}
|
6-8 줄 : 빈 생성자를 정의 11-13 줄 : 객체 생성시 name 값을 초기화 시키고 this 생성자를 통해 자신 객체를 참조한다. this의 생성 이유는 클래스에서 정의된 멤버 변수임을 정의하기 위해서이다.
16-18 줄 : price 값을 초기화시키면서 객체를 생성할 수 있는 생성자를 정의하는 부분 21-24 줄 : name과 price 값을 초기화시키고 생성자를 정의
32-42 줄 : 각 다른 생성자를 호출해서 객체를 생성하고 각 변수 값을 출력한다. |
1
2
3
4
5
|
|
9 - 상속 (0) | 2020.03.04 |
---|---|
7 - 메소드 (0) | 2020.03.04 |
6 - 클래스 ( class ) (0) | 2020.03.03 |
5 - 배열(Arrary) (0) | 2020.03.03 |
4 - 조건문 if & switch (0) | 2020.03.03 |
클래스
자바에서 생성되는 프로그램의 최소 단위
클래스를 만드는 주된 이유
- 나만의 타입 코드를 클래스를 생성하기 위해서
클래스 형식
class 클래스명 { 변수 정의; 메소드 정의;
} |
클래스 형식 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class Bank {
// 클래스에서의 변수 지정
String name;
int num;
int addmoney;
// 메소드 지정
void addMoney() {
System.out.println("돈을 넣었습니다.");
}
void minusMoney() {
System.out.println("돈을 뺏습니다.");
}
}
|
객체 생성
Car mycar1; // Car 클래스 타입인 mycar1 레퍼런스 변수를 선언 mycar1 = new Car(); // new 연산자를 사용해서 메모리상에 mycar1 객체를 생성 |
그림으로는 다음과 같이 표현이 가능합니다
객체를 생성하고 객체의 변수와 메소드 사용하는 예시를 들어보겠습니다.
변수와 메소드를 정의해준 클래스
Car.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Car { // 접근지정자 class 클래스명(대문자로 시작하고 source명과 동일해야함)
// 멤버 필드(전역변수) : 속성(특성, 구성 요소)
int speed;
public String irum;
//메소드 정의
void speedUp() {
speed++;
}
void speedDown() {
speed--;
}
}
|
객체를 생성하고 위에 만든 Car.java를 사용해보겠습니다.
MyCar.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class MyCar {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car myCar = new Car();
//변수 사용
//메소드사용
myCar.speedUp();
myCar.speedDown();
}
}
|
6번째 줄 - Car 클래스를 새로운 객체 myCar로 생성합니다.
9-10번째 줄 - Car 클래스에 정의되어있는 변수를 사용합니다.
13-18번째 줄 - Car 클래스에 정의되어있는 메소드를 불러와서 사용합니다.
출력 결과
1
2
3
4
|
차주인은 : 홍길동 현재 속도는 : 60
speedUp하였습니다. 현재 속도는 : 61
speedDown하였습니다. 현재 속도는 : 60
|
이번에는 변수의 종류에 대해서 알아보도록 하겠습니다.
default | 현재 패키지 내에서 호출 가능 |
private | 캡슐화 - 현재 클래스 내에서만 홏출 가능 |
public | 현재 프로젝트 내에서 호출 가능 |
8 - 생성자(Constructor) (0) | 2020.03.04 |
---|---|
7 - 메소드 (0) | 2020.03.04 |
5 - 배열(Arrary) (0) | 2020.03.03 |
4 - 조건문 if & switch (0) | 2020.03.03 |
3 - 반복문 for & while (0) | 2020.03.03 |
반복문
for문
반복 횟수가 정해져 있는 문장을 실행할 때 사용
예를 들도록 하겠습니다
int a;
int sum=0;
for (a = 1; a <= 10 ; a+=2) { //for( 초기; 조건; 증감) for문은 초기치와 목적치에만 영향을 받게 해줘야 함
System.out.print(a + " ");
sum += a; // 누적
}
|
해당 소스를 보면 변수 a는 1부터 10까지 2씩 증가한다는 조건을 확인할 수 있습니다.
System.out.println("\nfor 탈출 후 a값은 ? " + a);
System.out.println("합은 " + sum);
|
1 3 5 7 9 를 출력하게 된다.
다른 몇가지 예를 들어보겠습니다.
1) for문을 통하여 아스키코드 대문자 A - Z 를 출력하는 방법을 보여드리겠습니다.
for(int i = 65; i <=99; i++) {
System.out.print((char)i + " ");
}
|
i가 출력문에서 65가 들어가야하지만 앞에 (char)로 형 변환을 주었기 때문에 A를 출력하게 된다.
그러므로 결과값은
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c 과 같이 출력 된다.
2) 거꾸로 아스키코드 문자를 정수로 출력하는 반복문을 실행해보겠습니다.
for(int i = 'A'; i <= 'Z'; i++) {
System.out.print((Integer)i + " ");
}
|
출력문에서 i가 A부터 출력 되어야 하지만 앞에 (Integer)로 형 변환을 주었습니다.
그러므로 이번 결과값은 다음과 같습니다.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
3) 증감식을 다르게 주어보겠습니다.
for(int i = 90; i >=65; i-=2) {
System.out.print((char)i + " ");
}
|
이번에는 i의 조건이 90부터 65까지 줄어드는 것을 반복합니다. 그런데 증감식을 확인해보면 2씩 줄어들고 출력에서 형 변환을 준 것을 볼 수 있습니다. 그렇다면 이번 결과값은 다음과 같습니다.
Z X V T R P N L J H F D B
4) for문 안에 초기값과 증감식을 2개씩 줘보겠습니다.
for(int a = 0, b = 5; a <= 5; a++, b++) {
System.out.println(a + " " + b);
}
|
초기값을 각각 a = 0 과 b = 5 주고 a++ , b++ 로 1씩 증가시키면
0 5
1 6
2 7
3 8
4 9
5 10
과 같이 출력됩니다.
a가 만족하는 값 5까지 반복하고 for문을 탈출합니다.
다중 for문
for문 안에 for문에 들어가있는 것을 다중 for문이라고 합니다.
바로 예를 들어보도록 하겠습니다.
for(int m = 1; m <= 3; m++) {
System.out.println("m : " + m);
for(int n = 1; n<=4; n++) {
System.out.print("n = " + n);
}
System.out.println();
}
r
|
돌아가는 방식은 이렇습니다.
- m이 1인 경우 m 값을 출력하고 다음 for문으로 들어갑니다.
- n이 1부터 시작하고 for문이 만족하는 4까지 반복 출력해주고 내부 for문을 빠져나갑니다.
위와 같은 과정을 m이 3이 될 때까지 반복하고 나옵니다.
출력값은 다음과 같습니다.
m : 1
n = 1n = 2n = 3n = 4
m : 2
n = 1n = 2n = 3n = 4
m : 3
n = 1n = 2n = 3n = 4
|
continue문
ex: for(초기값; 조건식; 증감식) {
for(초기값; 조건식; 증감식) {
실행문;
continue; // 안쪽 for문으로 이동
continue; // ex for문으로
}
}
|
여기서 ex는 라벨로 별명을 주어준것과 비슷한 의미이다.
for(int aa = 1; aa <= 10; aa++) {
if(aa == 3) continue; // aa가 3이면 하단 문맥을 생략하고 다시 위로 올라감
System.out.println(aa);
// if(aa == 5) System.exit(0); exit를 만나면 무조건 응용 프로그램을 끝냄
// if(aa == 5) return; // return을 만나면 메인의 중괄호를 끝냄
if(aa == 5) break; // 해당되는 구간에서 반복문을 탈출 시킴
System.out.println("nice");
}
|
결과
1
nice
2
nice
4
nice
5
nice
6
nice
7
nice
8
nice
9
nice
10
nice
|
break문
가장 가까운곳의 반복문이나 다음에 나올 내용인 switch문을 빠져나간다.
continue 설명때 사용한 소스코드에서 break문을 사용해보도록하겠습니다.
for(int aa = 1; aa <= 10; aa++) {
if(aa == 3) continue;
System.out.println(aa);
if(aa == 5) break; // 해당되는 구간에서 반복문을 탈출 시킴
System.out.println("nice");
}
|
결과값
1
nice
2
nice
4
nice
5
|
while문
같은 반복문이지만 for문과 달리 조건이 만족할때만 반복한다.
int w = 1;
while(w <= 5) {
System.out.println("w : " + w);
w++; // 반복문 탈출 문장이 반드시 필요
}
|
w의 초기값은 1로 주어졌으며, 5가 되기전까지 만족하므로 반복하여 실행하게 된다.
w : 1
w : 2
w : 3
w : 4
w : 5
|
do ~ while문
while문과 동일하지만 차이점이 있다면 do~while문은 조건식이 뒤에주어집니다.
w = 1;
do {
System.out.println("w = " + w );
w++;
}while(w<= 5);
|
w = 1
w = 2
w = 3
w = 4
w = 5
|
반복문에 관련하여 공부한 문제
2020/03/03 - [JAVA/JAVA 프로그래밍 응용] - for문을 이용하여 어떤 수1의 배수이면서 수2의 배수의 개수와 그들의 합
6 - 클래스 ( class ) (0) | 2020.03.03 |
---|---|
5 - 배열(Arrary) (0) | 2020.03.03 |
4 - 조건문 if & switch (0) | 2020.03.03 |
2 - 연산자 (0) | 2020.03.03 |
1 - 데이터 타입 & 형 변환 (0) | 2020.03.02 |
연산자의 우선순위는 다음과 같다
종류 | 연산자 | 우선순위 |
최우선 연산자 | [] , {}, () |
높음 ∧ | | | | ∨
낮음 |
단항 연산자 | ++ , -- , ! | |
산술 연산자 | +, -, *, /, % | |
시프트 연산자 | << , >> | |
비교 연산자 | >, <, >=, <=, ==, != | |
논리 연산자 | &&, || | |
삼항 연산자 | (조건식) ? : | |
대입 연산자 | =, *=, += |
사칙연산의 경우 다들 아시는 부분이니까 예시를 들도록 하겠습니다 !
산술연산자
int a = 5;
int b = 3;
// 산술연산자
System.out.println(a); // 5 출력
System.out.println(b); // 3 출력
System.out.println("a + b = " + (a+b)); // 8 출력
System.out.println("a / b = " + (a/b)); // 1 출력
System.out.println("a % b = " + (a%b)); // 2 출력 (2는 나머지)
System.out.println("a / b = " + (a/(float)b)); // 1.666.. 출력(float형식이라 소수점까지 반환!)
System.out.println(a / 0.0); // Infinity
System.out.println(a % 0.0); // 나머지 NaN 출력
System.out.println(3 + 4 * 5); // 23 출력
System.out.println((3 + 4) * 5); // 35 출력
|
단항연산자
//누적
int no = 1;
no = no + 1; // 2 저장
no += 1; // 3 저장
no++; // 4 저장
System.out.println("no : " + no); // 4 출력
//증감 연산자
int imsi = 5;
int result = ++imsi + 1;
System.out.println(imsi + " " + result); // 6과 7 출력
int imsi2 = 5;
int result2 = imsi2++ +1; // imsi2의 값5가 1을 더하고 그 값을 result2에 준 후 imsi2 값 증가
System.out.println(imsi2 + " " + result2); // 6과 6 출력
System.out.println(imsi2); // 6출력
System.out.println();
//부호
int imsi3 = 3;
System.out.println(imsi3); // 3 출력
System.out.println(-imsi3); // -3 출력
System.out.println(-imsi3 * -1); // 3출력
|
소스에서 볼 수 있듯 ++imsi 는 전위 연산자이고,, imsi2++ 는 후위 연산자이다
여기서 전위 연산자란 연산 실행전에 먼저 실행 시키는 것이고, 후위 연산자란 연산 실행 후에 실행 하는 것이다.
그래서 imsi의 경우 5로 데이터 값을 주었지만 전위연산자를 통해 연산 실행 전에 실행하여 출력하였기 때문에
각각 6과 7이 출력된다.
imsi2의 경우는 후위 연산자를 사용하였기 때문에 연산을 실행하고 하여 각각 6과 6이 출력 되는 것이다.
추가! 문자열 사용!
String ss1 = "대한";
String ss2 = "민국";
String ss3 = ss1 + ss2; // ss3에 대한민국 저장
System.out.println("ss3 " + ss3); // 대한민국 출력
System.out.println("ss3 " + ss3 + "2010"); // 대한민국2010
System.out.println("ss3 " + ss3 + 2010); // 대한민국 2010
System.out.println(10 + 20); // 30
System.out.println(10 + Integer.parseInt("20")); // 30
System.out.println(10 + "20"); // 1020
System.out.println(10 + Integer.toString(20)); // 1020
|
숫자 + 숫자를 계산하는 경우 ! 30으로 출력 된다.
하지만 숫자 + "문자"와같은 경우는 10 + 문자10으로 계산하여 1020이 출력된다.
Integer.parseInt 문법은 문자를 정수로 바꿔주는 역할 !
Integer.toString 문법은 정수를 문자로 바꿔주는 역할 !
유용하게 쓰이니 알아두면 좋다
비교 연산자
a > b : a는 b보다 크다
a < b : a는 b보다 작다
a == b : a와 b의 값이 같은지 여부
a != b : a값이 b의 값과 다르면 true
int a = 5;
System.out.println(a > 3); // true
System.out.println(a < 3); // false
System.out.println(a == 3); // false
System.out.println(a != 3); // true
|
논리 연산자
'참' 값이면 true를 출력 '거짓' 값이면 false를 출력
조건1 && 조건2 : 조건1도 만족하고 조건2도 만족하는 경우 true 아니면 false
조건1 || 조건2 : 조건1 또는 조건2를 만족하는 경우 true 아니면 false
int a = 5;
int b = 10;
System.out.println(a > 3 && b <= 10); // true
System.out.println(a >= 3 && b == 7); // false
System.out.println(a > 6 || b <= 10 ); // true a는 6보다 크거나 b는 10보다 작거나 같다
System.out.println(a > 3 || b < 5); // true
System.out.println(a > 6 || b <= 10); // true
System.out.println(a > 7 || b < ( 5 + 10)); // true
|
쉬트프 연산자
>> |
: 오른쪽으로 비트, 부호비트 이동 |
>>> | : 오른쪽으로 비트, 비부호 비트 이동 |
<< | : 좌측으로 해당하는만큼 비트 이동하고 오른쪽 비는 만큼 0으로 채운다. |
int ii = 8, ij;
System.out.println("ii : " + ii + " " + Integer.toBinaryString(ii)); // 8 1000
ij = ii << 1; // 쉬프트 연산자 좌로 1보 남는 오른쪽은 0으로
System.out.println("ij : " +ij); // 16
ij = ii >> 2; // 쉬프트 연산자 우로 2보 남는 왼쪽은 부호와 같은 값으로
System.out.println("ij : " +ij); // 2
ij = ii >>> 2; // 쉬프트 연산자 우로 2보 남는 왼쪽은 0으로
System.out.println("ij : " + ij); // 2
|
삼항 연산자
변수 = (조건) ? 참 : 거짓
조건이 참이면 : 기준 왼쪽 출력 거짓이면 오른쪽 출력
// 삼항 연산자
int re = (ii > 5)?100 : 50 + 20 ; // 변수 = (조건)?참:거짓
System.out.println("re : " + re);
|
6 - 클래스 ( class ) (0) | 2020.03.03 |
---|---|
5 - 배열(Arrary) (0) | 2020.03.03 |
4 - 조건문 if & switch (0) | 2020.03.03 |
3 - 반복문 for & while (0) | 2020.03.03 |
1 - 데이터 타입 & 형 변환 (0) | 2020.03.02 |
변수란?
- 특정 타입의 데이터를 메모리상에 담을 수 있는 영역을 의미한다.
데이터 타입 변수이름 ;
ex) int num;
ex) String name;
위와 같은 변수명에 데이터를 정해주는 방법
변수이름 = 데이터 값;
ex) num = 10;
ex) name = 홍길동;
변수이름 = 데이터 값;
ex) num = 10;
ex) name = 홍길동;
2줄로 입력하지 않고 1줄로 데이터를 주는 방법
데이터 타입 변수이름 = 데이터 값;
ex) int num = 10;
ex) String name = 홍길동;
컴퓨터도 10인 영역에 2만 사용하면 영역을 낭비하는 일이 발생한다.
그 영역 낭비를 방지하고 효율적으로 사용하기 위해서 데이터 타입이 나뉘어진다.
byte | 8비트(1byte) 범위 : ( -128 ~ 127 ) | |||
short | 16비트(2byte) 범위 : ( -32768 ~ 32767 ) | |||
int | 32비트(4byte) | |||
long | 64비트(8byte) |
// 1byte = 8bit
byte var1;
var1 = 127;
System.out.println(Byte.MAX_VALUE); // 127 출력
System.out.println(Byte.MIN_VALUE); // -128 출력
short var2 = 20; // short 2byte 정수 기억 -32768 ~ 32767
// short var22 = 222222; // short 범위를 벗어나기 때문에
System.out.println("var2 : " + var2);
int var3 = 2147483647; // int 4byte 정수 기억 -2147483648 ~ 2147483647
// int var33 = 21474836477; // int 범위를 벗어나기 떄문에 컴파일 오류
System.out.println("var3 : " + var3);
long var4 = 8999999999999999999L;
System.out.println(Long.MAX_VALUE); // long형의 최대값이 출력
System.out.println("var4 : " + var4); // var4에 89999999999를 준 값 출력
|
여기서 각 타입의 최대값과 최소값을 보고 싶다면
데이터 타잊 | 최소값 | 최대값 |
byte | Byte.MIN_VALUE | Byte.MAX_VALUE |
short | Short.Min_VALUE | Short.MAX_VALUE |
int | Integer.MIN_VALUE | Integer.MAX_VALUE |
long | Long.MIN_VALUE | Long.MAN_VALUE |
//promotion : 자동 형변환(작은기억장소 -> 큰 기억장소)
//cast : 강제 형변환(큰기억장소 -> 작은기억장소)
byte b1 = (byte)128;
System.out.println("b1 : " + b1);
int b2 = 10;
byte b3 = (byte)b2; // cast : 강제 형변환
// 변수 형태만 본거기 때문에 int가 들어가면 byte보다 큰값도 있으므로
// 실제 값은 byte형을 충족하여도 오류가 뜬다
// int형으로 충족시키고 싶다면 (byte)b2 를 기입하여야함
System.out.println("b3 : " + b3);
short s1 = 10;
int i1 = s1; // promotion : 자동 형변환
System.out.println("i1 : " + i1);
|
float | 32비트(4byte) |
double | 64비트(8byte) |
double d1 = 10.5;
d1 = 5; // 실수형의 저장장소가 정수형 저장장소의 크기보다 크다
System.out.println("d1 : " + d1); // 5.0 출력
float f1 = (float)4.5; // 또는
float f11 = 4.5F; // 로 입력해주어야한다.
f1 = 5.1F; // 왜냐하면 (float)또는 F를 생략하면 double로 읽기때문이다.
System.out.println("f1 : " + f1); // 5.1 출력
|
실수형도 정수형과 마찬가지로 최소값과 최대값을 보고싶다면
데이터 타입 | 최소값 | 최대값 |
float | Float.MIN_VALUE | Float.MAX_VALUE |
double | Double.MIN_VALUE | Double.MAX_VALUE |
Boolean | true 또는 false 출력 |
boolean bu = true; // true 또는 false
boolean bu1 = false;
System.out.println("bu : " + bu); // true 출력
System.out.println("bu1 : " + bu1); // false 출력
|
char 형
char | 16비트, 유니코드(0~65535) 출력 |
char c1= 'a';
char c11 = 'A';
System.out.println("c1 : " + c1); // a 출력
System.out.println("c11 : " + c11); // A 출력
System.out.println((int)c1); // 97 출력
System.out.println((char)97); // a 출력
|
(int)c1이 왜 97일까 ? (char)97이 왜 a 일까?
https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C
해당 글을 참고하면 도움이 될 것 같다. 아스키 코드를 활용해서 hex 16진수와 octal 8진수 값도 한번 출력해보았다.
// hex 16진수
System.out.println(0xa); // 10 출력
System.out.println(0xf); // 15 출력
// octal 8진수
System.out.println(05); // 5 출력
System.out.println(011); // 9 출력
|
위 나무위키 링크에 있는 값과 예시 출력 값을 비교하면 같은 것을 알 수 있다.
기본형 데이터 타입을 제외한 데이터 타입
String irum = "홍길동";
// 어딘가의 주소해 홍길동이라는 이름이 있고 그것을 irum이 참조하는 것
System.out.println(irum);
|
6 - 클래스 ( class ) (0) | 2020.03.03 |
---|---|
5 - 배열(Arrary) (0) | 2020.03.03 |
4 - 조건문 if & switch (0) | 2020.03.03 |
3 - 반복문 for & while (0) | 2020.03.03 |
2 - 연산자 (0) | 2020.03.03 |