개발자
[JAVA 3일차]파라미터,생성자/필드값변경/Casting 본문
파라미터
Member 클래스 인스턴스(객체) 생성하기 및 출력
생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드(하지만 메소드와는 다르다.)이다. 생성자는 인스턴스 변수(필드 값 등)를 초기화 시키는 역할을 한다.
[출처] [JAVA/자바] 생성자(Constructor)와 초기화|작성자 JOKER
(Member)
1
2
3
4
5
6
7
8
|
//field, attribute, property, 속성
String userid;
String passwd;
String name;
int age;
int point;
|
cs |
1. 파라미터 없고 리턴타입 있는 메소드 생성하기(Member)
1
2
3
4
5
6
7
8
9
10
11
12
|
//mothod, function, 기능, 행위
//파라미터는 없고 리턴타입이 있는 메소드 생성해보기
String showInfo()
{
return "====" + this.name + "님======\n" //this는 지금은 써도그만 안써도 그만
+ "1. 아이디 :"+ this.userid +"\n"
+ "2. 비밀번호 : "+ this.passwd +"\n"
+ "3. 성명 : "+ name +"\n"
+ "4. 나이 : " +age + "\n"
+ "5. 포인트 : "+ point +"\n";
}
|
cs |
1-1.파라미터 없는 기본생성자로 객체 생성하기(Main)
1
2
3
4
5
6
7
|
//기본생성자로 Member 클래스 인스턴스(객체) 생성하기
Member hongMbr = new Member();
hongMbr.userid = "hongkd";
hongMbr.passwd = "abcd";
hongMbr.name = "홍길동";
hongMbr.age = 30;
hongMbr.point = 100;
|
cs |
출력(Main)
1
|
System.out.println(hongMbr.showInfo());
|
cs |
2. 파라미터 있는 생성자(Member)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// *** 생성자(constructor) 및 생성자 오버로딩(Overloading) *** //
//기본생성자는 생략되어있다.
//그런데 아래와 같이 파라미터(parameter)가 있는 생성자(constructor)를 만들어 주면 생략 되어져있던 기본생성자는 삭제가 되어져 버린다.
//그래서 기본 생성자가 필요할 경우 반드시 아래처럼 기본생성자를 만들어줘야한다.
// 기본 생성자(constructor)
public Member() {
}
// 소괄호() 속에 있는 String userid 이러한 것을 파라미터(parameter) == 아규먼트(argument) == 인자 == 인수
// 파라미터(parameter)가 있는 생성자(constructor)
public Member(String userid, String passwd, String name, int age, int point) {
// 지역변수명과 멤버변수(인스턴스변수 와 static 변수를 모두 지칭하는 것)명이
// 일치할 경우에는 지역변수가 우선된다.
// 이럴경우 지역변수와 멤버변수를 구분을 지어주어야 한다.
// 이때 사용하는 것이 this 이다.
// this 는 해당 클래스(지금은 Member 클래스)로 생성되어진 instance(인스턴스)를 가리키는 대명사이다.
// 그래서 this.필드명을 사용하면 바로 멤버변수를 가리키는 것이다.
this.userid = userid; //지역변수 됐다.this 붙여서 인스턴스 구분해주기
this.passwd = passwd;
this.name = name;
this.age = age;
this.point = point;
}
|
cs |
2-1 파라미터 있는 기본생성자로 객체 생성하기(Main)
1
2
3
|
//파라미터가 있는 기본생성자로 Member 클래스 인스턴스(객체) 생성하기
Member hanskMbr = new Member("hansk","1234","한석규",26,200);
|
cs |
출력 및 결과값(Main)
1
2
3
4
5
6
7
8
9
|
System.out.println(hanskMbr.showInfo());
/*
==== 한석규님 ====
1. 아이디 : hansk
2. 비밀번호 : 1234
3. 성명 : 한석규
4. 나이 : 26
5. 포인트 : 200
|
cs |
인스턴스의 필드값 변경하기(인스턴스 변수 바꾸기)
1. 파라미터가 있고 리턴타입이 void인 메소드 생성(member)
1
2
3
4
5
6
7
|
//파라미터가 있고 리턴타입이 void 인 메소드 생성하기
void updateInfo(String passwd, String name, int age, int point) {
this.passwd = passwd;
this.name = name;
this.age = age;
this.point = point;
}
|
cs |
출력 및 결과
1
2
3
4
5
6
7
8
9
10
11
12
|
hongMbr.updateInfo("0987abcd","Hong kildong", 27, 150);
System.out.println(hongMbr.showInfo());
/*
==== HongKildong님 ====
1. 아이디 : hongkd
2. 비밀번호 : 0987abcd
3. 성명 : Hong Kildong
4. 나이 : 27세
5. 포인트 : 150 point
*/
|
cs |
변경은 uadateInfo메소드로 해주고
출력은 ShowInfo 메소드로 해준다
실행종료시각 추가해서 메소드 생성
1.return 값 있는 메소드(member)
1
2
3
4
5
|
String showInfo_2()
{
return showInfo() + " 6. 실행종료시각 :" + MyUtil.currentTime() +"\n";
}
|
cs |
출력 및 결과<Main>
1
2
3
4
5
6
7
8
9
10
11
12
|
System.out.println(hongMbr.showInfo_2());// 지금은 string 으로 void 일때는 hongMbr.showInfo_2();
/*
==== HongKildong님 ====
1. 아이디 : hongkd
2. 비밀번호 : 0987abcd
3. 성명 : Hong Kildong
4. 나이 : 27세
5. 포인트 : 150 point
6. 실행종료시각 : 2022-06-02 15:35:40
*/
|
cs |
2.void 형식의 메소드
1
2
3
4
|
void showInfo_3()
{
System.out.println(showInfo() + " 6. 실행종료시각 :" + MyUtil.currentTime() +"\n");
}
|
cs |
출력 및 결과
1
2
3
4
5
6
7
8
9
|
hanskMbr.showInfo_3(); //void 일때
/* ==== hansk님 ====
1. 아이디 : hansk
2. 비밀번호 : asdf0070
3. 성명 : 석규한
4. 나이 : 50세
5. 포인트 : 700 point
6. 실행종료시각 : 2022-06-02 15:35:40
|
cs |
파라미터 이해해보기
1.파라미터 있는 메소드 생성하기<Member>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
void sum_1(int a,int b) {
System.out.println(a+"+"+b+"="+(a+b) +"입니다.");
//10+20+30입니다. (a+b)에서 괄호를 빼버리면 문자열 결합이 된다.
}
String sum_2(int a, int b) {
return a+"+"+b+"="+(a+b);
//10+20+30
}
int sum_3(int a,int b) {
return a+b;
//int sum_3(double a,int b) 이 형태는 오류 int는 실수 표현안되니까
// return a+b; int sum_3에서 sum을 double 로바꾸면 자동 형변환 된다.
}
|
cs |
출력 및 결과<Main>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
hanskMbr.sum_1(10,20);
////10+20+30입니다.
String str = hanskMbr.sum_2(10,20);
System.out.println(str);
//10+20=30
System.out.println(hanskMbr.sum_2(10,20));
//같은거라 굳이 str에 담을 필요없다
int n = hanskMbr.sum_3(10,20);
System.out.println(n);
//30
System.out.println(hanskMbr.sum_3(1, 2)); // 내가 짠거
//3
|
cs |
casting(캐스팅)
<데이터형 변환하기 >
1. 자동 형변환(묵시적 형변환)
: 데이터타입의 크기가 작은 것에서 크기가 큰쪽으로는 자동적으로 형변환이 발생된다.
byte(1byte) --> short(2byte) --> int(4byte) --> long(8byte)
개미 병아리 강아지 사람
개미집 병아리집 강아지집 안방
float(4byte) --> double(8byte)
:정수타입은 실수타입으로 자동형변환이 발생한다.
char(2byte)
: char타입은 int형으로 자동형변환이 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
char ch = 'a';
System.out.println("ch => " + ch); // ch => a
System.out.println(ch+1); // (int)ch + 1 ==> (int)'a' + 1==> 97 + 1 ==>98
System.out.println((char)(ch-32)); // 'A'
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
// Character chr = new Character('a');
// 또는
Character chr = 'a';
System.out.println("chr =>" + chr); // chr -> a
System.out.println(chr + 1); // (int) chr + 1 ==> (int)'a' + 1 =>97 + 1 =>98
System.out.println((char)(chr - 32)); // A
System.out.println((char)('a'-32)); // A
|
cs |
2. 강제 형변환(casting)
: 데이터타입의 크기가 큰것을 작은것으로 강제적으로 형변환 시키는 것을 말한다.
크기가작은타입 = (크기가작은타입)크기가큰타입
2-2. 실수를 정수로 강제적으로 형변환하는 것을 말한다.
소수부는 무조건 절삭을 해버리고 정수만 나온다.
: 정수 = (정수)실수
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
// 1. 자동 형변환(묵시적 형변환)
byte no1 = 100; // byte => 1byte -128 ~127
short sh = no1; // short => 2byte -32,768 ~ 32,767
//위의 것은 short sh = (short)no1; 을 되는 것이다. 쇼트로 변한것임 자동적으로
System.out.println("sh => " + sh);
//sh => 100
int in = sh; // int => 4byte -2,147,483,648 ~ 2,147,483,647
// 위의 것은 int in = (int) sh; 을 되는 것이다.
System.out.println("in =>" + in);
//in =>100
long ln = in; // long => 8byte -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
// 위의 것은 long in = (long) in; 을 되는 것이다.
System.out.println("ln=>" + ln);
//In => 100
float ft =1.234F;
System.out.println("ft =>" + ft); //float 단정밀도 소수점 이하 7자리까지 표현됨.
// ft =>1.234
double db =ft; // double 배정밀도 소수점 이하 15~16자리까지 표현됨.
// 위의 것은 double db= (double)ft;
System.out.println("db =>" + db);
// db => 1.2339999675750732
float ft4 = (float)db; //이건 내가 그냥 해본 코딩 강제 형변환
System.out.println("ft4=>" + ft4);
System.out.println("\n~~~~~~~~ 강제형변환 ~~~~~~~~\n");
double db2 = 1.23456789;
System.out.println("db =>" + db2);
//db2 => 1.234556789
float ft2 = (float)db2;
System.out.println("ft2 =>" + ft2);
//ft => 1.2345679 반올림
int in2 = 40000;
System.out.println("in2 => " + in2);
// in2 => 30000 40,000으로 바꿈
short sh2 = (short)in2;
System.out.println("sh2 => " + sh2);
// sh2 => -25536 이상한 값이 나옴. short는 -32,768 ~ 32,767 까지만 표현할 수 있기 때문이다.
int in3 = 30000;
short sh3 = (short)in3;
System.out.println("sh3 => " + sh3);
// sh => 30000
long ln2 = 3000000000L; // long 8byte
float ft3 = ln2; // float 4byte
// 위의 것은 float ft3 = (float)ln2; 으로 자동형변환 된다. -> 실수로 , 실수가 더 크니까
System.out.println("ln2 =>" + ln2);
// ln2 => 3000000000
System.out.println("ft3 =>" + ft3);
// ft3 => 3.0E9 은 3.0 * 10의 9승이다.
double db3 = 123.98765;
int in4 = (int)db3;
System.out.println("db3 => " + db3); // 실수를 정수로 강제형변환 하면 소수부를 잘라버리는 절삭의 효과를 가진다.
// db3 =>db3 => 123.98765
System.out.println("in4 => " + in4);
// in4 => 123
|
cs |
'개발자 > JAVA' 카테고리의 다른 글
[JAVA 6일차]wrapper/tpUppercase/chatAt/Math(반올림등)/equals/switch (0) | 2022.08.15 |
---|---|
[java 5일차]파라미터 좀 더 이해해보기 (0) | 2022.08.15 |
[JAVA 4일차]연산자(산술,증감,논리,비교,할당,삼항)/연산메소드/Scanner/try catch(예외)/Integer(변환)/NumberFormatExceptio (0) | 2022.08.15 |
[JAVA 2일차]메소드,지역변수/현재시각 메소드/자료형,초기화,변수 선언,형변환/import(아직) (0) | 2022.06.24 |
[JAVA 1 일차] JAVA 설치/JRE와JDK(설치 및 환경 변수 설정)/클래스,변수,객체,필드,메소드 (0) | 2022.06.14 |