bin까지의 경로만 cmd에 복사하기
-매번 bin폴더로 이동해서 실행시켜야함. 귀찮음!
▶ java -cp {path} fullpathname
cp: classPath || path: bin폴더,기준위치 || fullpathname:클래스파일이름
1.cd\ 로 제일루트파일로가기
2. java -cp {기준경로} 실행할파일 입력
-클래스,변수,메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
-제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
-하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.
JNI
-JAVA NATIVE INTERFACE
▶접근제어자: public protected default private
▶그 외 : static final abstract translent synchronized volatile strictfp
-parent2 클래스-
package chap07;
//public final class Parent2 { //자식을 가질수 없는 마지막 자손클래스
public class Parent2 {
String name;
Parent2(String name){
this.name = name; //자식클래스 오류남. 매개변수가 있는, 인스턴스 생성불가
System.out.println("Parent 인스턴스 생성");
}
//final void methodA() {
void methodA() {
System.out.println("Parent 클래스 methodA()");
}
}
-child2 클래스-
public class Child2 extends Parent2 {
String gender;
Child2(String name, String gender){
super(name);
this.gender = gender;
System.out.println("Child 인스턴스 생성");
}
void methodA() {
super.methodA(); //숨겨진 부모클래스의 methodA 출력
System.out.println("Child 클래스 methodA()");
}
}
-Cicle2클래스-
public class Circle2 {
static final double Pi = 3.141592;
//static final double Pi; //static final 변수는 반드시 선언과 동시에 초기화 해주어야 한다.
final int radius;
static {
//Circle2.Pi = 3.141592;
}
Circle2(int radius){
this.radius = 1234;
}
double getArea() {
final double result;
result = this.radius * Circle2.Pi;
return result;
}
}
출력 -Ex5클래스-
public class Ex5 {
public static void main(String[] args) {
Circle2 circle = new Circle2(7);
System.out.println("pi: "+circle.Pi);
//circle.Pi = 3.14; final 써두면 못바꿈
System.out.println("radius: "+circle.radius);
//circle.radius = 3;
}
}
-멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다.
접근 제어자가 사용될 수 있는곳 - 클래스,멤버변수,메서드,생성자
▶private - 같은 클래스 내에서만 접근이 가능하다.
▶default - 같은 패키지 내에서만 접근이 가능하다. //접근제어자를 안쓰면 default
▶protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
▶public - 접근 제한이 전혀 없다.
-접근제어자를 사용하는이유-
▶외부로부터 데이터를 보호하기 위해서
▶외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서
-parent클래스-
package chap07.packageA;
public class Parent {
private int num1;
int num2;
protected int num3;
public int num4;
public Parent(int num1, int num2, int num3, int num4){
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
this.num4 = num4;
}
protected int getNum1() {
return this.num1;
}
public int getNum2() {
return this.num2;
}
}
-child클래스-
package chap07.packageB;
import chap07.packageA.Parent;
public class Child extends Parent {
int result;
public Child(int num1, int num2, int num3, int num4){
super(num1,num2,num3,num4);
}
public int getResult() {
this.result = this.num3 + this.num4;
this.result += this.getNum1();
this.result += this.getNum2();
return this.result;
}
}
//부모의num1은 private라서 못씀
//num2는 default라서 자기 패키지안에서만 쓸수있음
-출력하는 Ex6클래스-
package chap07;
import chap07.packageB.Child;
public class Ex6 {
public static void main(String[] args) {
//chap07.packageB.child 클래스의 인스턴스를 생성하고 result값을 가져오는 코드를 생성하세요.
//만약 안된다면 문제가 무엇인지 찾고 해결하세요.
//가장 제한적인 방법
Child c1 = new Child(1,2,3,4);
System.out.println("result값: "+c1.getResult());
}
}
-일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다.
-생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다.
필드의값 설정 - setter
필드의값 반환 - getter
package chap07;
public class Circle5 {
static Circle5 circle; //자기자신타입의 래퍼런스, static
static final double Pi = 3.141592;
private int radius;
private Circle5(int radius){
this.setRadius(radius);
}
static Circle5 getCircle5(int radius) {
if(Circle5.circle == null) {
Circle5.circle = new Circle5(radius);
}else {
Circle5.circle.setRadius(radius);
}
return Circle5.circle;
}
void setRadius(int radius) {
if(radius >0) {
this.radius = radius;
}else {
this.radius = 1;
}
}
int getRadius() {
return this.radius;
}
double getCirclecumferance() {
return this.radius * 2 * Circle5.Pi;
}
double getArea() {
return this.radius * this.radius * Circle5.Pi;
}
}
-Ex10-
package chap07;
public class Ex10 {
public static void main(String[] args) {
Circle5 c1,c2,c3,c4;
c1=Circle5.getCircle5(3);
System.out.println("area: "+c1.getArea());
System.out.println("Circlecumferance: "+c1.getCirclecumferance());
c2=Circle5.getCircle5(4);
System.out.println("area: "+c2.getArea());
System.out.println("Circlecumferance: "+c2.getCirclecumferance());
c3=Circle5.getCircle5(5);
System.out.println("area: "+c3.getArea());
System.out.println("Circlecumferance: "+c3.getCirclecumferance());
c4=Circle5.getCircle5(6);
System.out.println("area: "+c4.getArea());
System.out.println("Circlecumferance: "+c4.getCirclecumferance());
System.out.println("==================");
System.out.println("c1 == c2 : "+(c1 == c2));
System.out.println("c2 == c3 : "+(c2 == c3));
System.out.println("c3 == c4 : "+(c3 == c4));
}
}