클래스를 구성하는 요소를 멤버라고 부르며 총 4가지가 있다.
1. 멤버필드
2. 멤버메서드
3. 생성자 : 필드의 초기화
4. 내부 클래스
package classes;
//point --> 8바이트의 인티형변수 두개의 집합
//새로운 데이터 파일이라고 접근
public class Point {
int x;
int y;
//인스턴스 변수 : 멤버 필드
//static int aaa;
//모든클래스에는 1개 이상 생성자가 존재합니다.
}
package classes;
public class ClassTest01 {
public static void main(String[] args) {
//용량이 어느정도 담을지 몰라 static을 사용하지 않고 heep메모리에 저장한다.
Point p1=new Point();
p1.x=10;
p1.y=20;
System.out.println(p1.x);
System.out.println(p1.y);
//서로 다른 데이터리다.
//
//객체변수란 힙메모리에 메모리를 할당시켜 참조변수를
Point p2=new Point();
p1.x=100;
p1.y=200;
System.out.println(p1.x);
System.out.println(p1.y);
}//main
}//class
기대값
10
20
100
200
class -교재 p.197
package classes;
import java.util.Scanner;
public class Circle {
Point pos;//참조형은 null초기화
double r;//더블형은 0 초기화
Scanner in;
//필드의 초기화 담당: 생성자
//생성자
//클래스이름과 생성자의 이름은 같다.
//메서드와 구조가 비슷하게 생겼으며 이름 뒤에 ()하고 바디가 존재한다.
//생략가능하다.
Circle(){
pos=new Point();
r=0;
}
}
package classes;
public class CircleText01 {
public static void main(String[] args) {
//
Circle c1=new Circle();
c1.pos = new Point();
c1.r=2.5;
//[2,3]
c1.pos.x=2;
c1.pos.y=3;
//c1.pos.x=10;
System.out.println(c1.pos);
System.out.println("["+c1.pos.x+","+c1.pos.y+"]");
System.out.println(c1.r);
//System sys = new System();
}
}
기대값
classes.Point@2f92e0f4// 타입
[2,3]
2.5
package classes;
public class ConstructorText {
public static void main(String[] args) {
//new가 힙에 메모리를 할당해주는 역할을 한다.
Point02 p2= new Point02();
System.out.println(p2.x);
System.out.println(p2.y);
p2=new Point02(10);//여기서 10은 객체 초기값을 내가 한다라고 라고 생각하면 됌
System.out.println(p2.x);
System.out.println(p2.y);
p2=new Point02(100);//인자, argument
System.out.println(p2.x);//객체는 필드 다음 메서드를 호출함
System.out.println(p2.y);
p2 = new Point02("123");//문자열 출력
System.out.print("");
System.out.println(p2.x);
System.out.println(p2.y);
p2=new Point02(5, 50);//인자, argument
System.out.println(p2.x);//객체는 필드 다음 메서드를 호출함
System.out.println(p2.y);
}//main
}//class
package classes;
public class Point02 {
int x;//필드 인스턴스 변수 --> 생성자 바깥쪽에 선언되어 있는 것
int y;//인스턴스 변수는 'new' 키워드를 사용하여 객체를 생성할 때 생성되고 객체가 소멸되면 소멸
//중복으로 생성은가능 하지만 호출할때는 컴파일러가 구분할 수 있도록
//이름은 일치하되 매개변수의 타입 혹은 갯수를 다르게 만들어야 사용가능 하다.
//생성자 생성 --> 정의
public Point02() {
x=10;//여기선 구분할 필요가 없어 this.x라고 안해도 되지만
//명확하게 구분하고 싶거나 내부클래스가 또 생성될 경우엔 적용한다.
y=20;
System.out.print("["+x+","+y+"]\n");
//int x;
}//생성자 Point02
public Point02(int x) {//지역변수 x 파라미트?
this.x=x;//멤버필드 x하고 지역변수x를 구분하기 위해 this 키워드 사용
y=2000;
//int x 라는 매개변수가 있으면 생성자가 중복이 아니다 다른 생성자로 판단.
//public Point02() {}라고 되어 있으면 코드중복으로 실행되지 않는다.
}
public Point02(String x) {//문자열로 나타낼 수 있는 생성자
this();//디스생성자는 생성자 내부의 첫번째문장에서만 허용되며,
//파라미트가 디폴트값인 것을 의미한다.
//이것은 Point02(String x)를 지나 public Point02() {}에 있는 값이 호출된다.
this.x=Integer.parseInt(x);
y=22;
}
public Point02(int x,int y) {//변수의 갯수가 달라졌기때문에 사용가능한 코드
this.x=x;//현재클래스의생성자
this.y=y;
}
//1. 형태는 메서드와 비슷하다.이름(파라미트){바디}
//2. 이름이 클래스 이름과 같다.
//3. 생성자는 여러개 정의할 수(만들어 낼)수 있지만--> 생성자 오버로드(Overload)
//컴파일러가 호출시 구분할 수 있도록 매개변수의 타입 혹은 갯수를 다르게 만들어야 사용가능 하다.
//4.일반적으로 멤버필드 =초기화를 담당하고 있다.
}//class Point02
기대값
[10,20]
10
20
10
2000
100
2000
[10,20]
123
22
5
50
package classes;
public class Bank02{
String name;
static double rate;//클래스변수, 정적변수
long money;
public Bank02(long money) {
this.money=money;
System.out.println("통장개설 완료!" );
}
public Bank02() {
System.out.println("통장개설 완료!" );
}
//객체 생성 최초시 딱 1번만 실헹됩니다.
static {
rate=2.5;
System.out.println("이자율 적용" );
}
}//Bank
package classes;
public class BankText02 {
public static void main(String[] args) {
Bank02 b = new Bank02();
Bank02 b1 = new Bank02();
b1.money=100000;
Bank02 b2 = new Bank02(10000);
기대값
이자율 적용
통장개설 완료!
통장개설 완료!
통장개설 완료!
package classes;
public class Bank02{
String name;//static 필드는 클래스이름으로 접근한다.
static double rate;//클래스변수, 정적변수 --> 공유
long money;
public Bank02(long money) {
this.money=money;
System.out.println("통장개설 완료되었습니다!" );
}
public Bank02() {
System.out.println("통장개설 완료되었습니다!" );
}
//객체 생성 최초시 딱 1번만 실헹됩니다.
static {
rate=2.5;
System.out.println("현재 이자율 적용되었습니다" );
}
}//Bank
package classes;
public class BankText02 {
public static void main(String[] args) {
System.out.println("공통이자율 : "+Bank02.rate);
Bank02 b1 = new Bank02();
b1.name = "이현땡고객님";
b1.money = 100000;
long interest= (long)(b1.money *Bank02.rate / 100);
b1.money = b1.money +interest;
System.out.println(b1.name+" : "+ b1.money);
Bank02 b2 = new Bank02(10000);
b2.name = "오쉬맨고객님";
b2.money = 10000;
interest= (long)(b2.money *Bank02.rate / 100);
b2.money = b2.money +interest;
System.out.println(b2.name+" : "+ b2.money);
System.out.println("3개월 이후 이자변동이 있습니다.");
Bank02.rate=3.5;
interest= (long)(b1.money *Bank02.rate / 100);
b1.money = b1.money +interest;
System.out.println(b1.name+" : "+ b1.money);
interest= (long)(b2.money *Bank02.rate / 100);
b2.money = b2.money +interest;
System.out.println(b2.name+" : "+ b2.money);
}//main
}//class
기대값
현재 이자율 적용되었습니다
공통이자율 : 2.5
통장개설 완료되었습니다!
이현땡고객님 : 102500
통장개설 완료되었습니다!
오쉬맨고객님 : 10250
3개월 이후 이자변동이 있습니다.
이현땡고객님 : 106087
오쉬맨고객님 : 10608