java0116
final
class
상속을 받을 수 없다.
상속을 받는 이유 : 물려받아서 수정하고, 오버라이딩하고 ... --> 불가
final class는 처음에 만들어 놓은 모양 그대로만 사용할 수 있다.
method
overriding(재정의) 불가
클래스 상속은 가능, 클래스 안의 다른 메소드는 가능.
final이 붙은 메소드만 오버라이딩 불가.
클래스가 파이널이면, 클래스 상속 불가. 그안의 메소드도 건들일 수 없다. ==> final method 효과
일반 클래스에서 한 메소드만 final면, 그 메소드만 overriding 불가.
variable
상수가 된다. 항상 변하지 않는 값.
ex) math.class
final class ==> 모든 메소드와 변수는 final. 즉, 고칠 수 없다.
package com.basic;
//1. final calss : 상속이 안됨
final class MyFinal{
public void test() {
System.out.println("MyFinal-test()");
}
}
class YourFinal{
public void test2() {
//....
}
//2. final method: overriding이 안됨
public final void test() {
System.out.println("YourFinal-test()");
}
}
public class FinalTest extends YourFinal{
//3. final variable: 값을 수정할 수 없음.
final int max = 999;
public static void main(String[] args) {
FinalTest f = new FinalTest();
//f.max = 10;
}
}
**static
field variable, method, block 에 붙힐 수 있다.
생성이 되는 위치와 시점이 다르다.
소스파일 --컴파일--> 실행파일 ----> ~~~
.src .class
컴파일 하다가 static 을 만나면 인식하고,
실행버튼 누르면. main이 실행되기 전에 (컴파일 시점) static붙은 애들은 컴파일러가 미리 class area에 미리 만들어 놓는다. 1개만.
원래는 main이 실행되어야 객체가 만들어짐
x
package com.basic;
public class StaticTest {
//1. static field. class area에 실행전 한개만 미리 만들어 짐. 객체 생성을 하지 않아도 된다.
static int scount; //=0. class variable
int count;//=0. 실행이 되면 객체마나 만들어짐. instance variable
//필드는 객체를 생성하면 기본값이 있다.
//2. static method
public static void go() {
System.out.println("gogogo~~~");
}
//3. static block : { }, 메인보다 먼저 생성
static {
System.out.println("static block-1");
}
public static void main(String[] args) {
// System.out.println(++count); // non static field count ERROR
System.out.println(++scount);
go();
System.out.println(Math.PI);
System.out.println(Math.pow(2, 3));
System.out.println(Math.max(2,3));
System.out.println(Math.min(2, 3));
System.out.println(Math.abs(-22));
// StaticTest s1 = new StaticTest();
// StaticTest s2 = new StaticTest();
// StaticTest s3 = new StaticTest();
//
// System.out.println(++s1.count + "--" + ++s2.count + "--" + s3.count);
// System.out.println(++s1.scount + "--" + ++s2.scount + "--" + s3.scount);
}
}
count변수는 객체 생성을 해야 만들어진다.
static 변수를 사용할때는 객체 생성을 안해도 된다.
타 클래스에서 static변수를 사용하고 싶을때
==> 클래스이름.변수명
xxxxxxxxxx
package com.basic;
public class HelloWorld {
public static void main(String[] args) {
/* Static 호출 */
System.out.println(StaticTest.scount);
StaticTest.go();
String name = "tommy";
String this2 = "hi";
System.out.println(name + this2);
}
}
static method 안에서는 this, super 사용 불가능
main이 실행되기전에 생성되므로, this나 super가 없어서 error발생
'Computer Science > Languages' 카테고리의 다른 글
[java] 쓰레드(Thread) (0) | 2019.01.24 |
---|---|
[java] 예외처리 (2) | 2019.01.24 |
[java] Collection 활용 (0) | 2019.01.17 |
[java] interface (0) | 2019.01.16 |
JAVA 입출력 (2) | 2019.01.08 |