티스토리 뷰
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 | package org.opentutorials.javatutorials.classninstance; class Calculator2 { static double PI = 3.14; // 클래스 변수인 base가 추가되었다. static int base = 0; int left, right; public void setOprands(int left, int right) { this.left = left; this.right = right; } public void sum() { // 더하기에 base의 값을 포함시킨다. System.out.println(this.left + this.right + base); } public void avg() { // 평균치에 base의 값을 포함시킨다. System.out.println((this.left + this.right + base) / 2); } } public class CalculatorDemo2 { public static void main(String[] args) { Calculator2 c1 = new Calculator2(); c1.setOprands(10, 20); // 30 출력 c1.sum(); Calculator2 c2 = new Calculator2(); c2.setOprands(20, 40); // 60 출력 c2.sum(); // 클래스 변수 base의 값을 10으로 지정했다. Calculator2.base = 10; // 클래스를 통한 직접 변수 호출 (인스턴스 생성 필요 X) System.out.println(Calculator.PI); // 40 출력 c1.sum(); // 70 출력 c2.sum(); } } | cs |
- static가 있으면 클래스의 맴버가 되고 해당 클래스로 생성된 인스턴스가 값을 공유하게 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package org.opentutorials.javatutorials.classninstance; class Calculator3{ public static void sum(int left, int right){ System.out.println(left+right); } public static void avg(int left, int right){ System.out.println((left+right)/2); } } public class CalculatorDemo3 { public static void main(String[] args) { Calculator3.sum(10, 20); Calculator3.avg(10, 20); Calculator3.sum(20, 40); Calculator3.avg(20, 40); } } |
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
package org.opentutorials.javatutorials.classninstance;
class C1{
static int static_variable = 1;
int instance_variable = 2;
static void static_static(){
System.out.println(static_variable);
}
static void static_instance(){
// 클래스 메소드에서는 인스턴스 변수에 접근 할 수 없다.
//System.out.println(instance_variable);
}
void instance_static(){
// 인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다.
System.out.println(static_variable);
}
void instance_instance(){
System.out.println(instance_variable);
}
}
public class ClassMemberDemo {
public static void main(String[] args) {
C1 c = new C1();
// 인스턴스를 이용해서 정적 메소드에 접근 -> 성공
// 인스턴스 메소드가 정적 변수에 접근 -> 성공
c.static_static();
// 인스턴스를 이용해서 정적 메소드에 접근 -> 성공
// 정적 메소드가 인스턴스 변수에 접근 -> 실패
c.static_instance();
// 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공
// 인스턴스 메소드가 클래스 변수에 접근 -> 성공
c.instance_static();
// 인스턴스를 이용해서 인스턴스 메소드에 접근 -> 성공
// 인스턴스 메소드가 인스턴스 변수에 접근 -> 성공
c.instance_instance();
// 클래스를 이용해서 클래스 메소드에 접근 -> 성공
// 클래스 메소드가 클래스 변수에 접근 -> 성공
C1.static_static();
// 클래스를 이용해서 클래스 메소드에 접근 -> 성공
// 클래스 메소드가 인스턴스 변수에 접근 -> 실패
C1.static_instance();
// 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
//C1.instance_static();
// 클래스를 이용해서 인스턴스 메소드에 접근 -> 실패
//C1.instance_instance();
}
}
- 인스턴스 메소드는 클래스 멤버에 접근 할 수 있다.
- 클래스 메소드는 인스턴스 멤버에 접근 할 수 없다.
- 인스턴스 변수는 인스턴스가 만들어지면서 생성되는데, 클래스 메소드는 인스턴스가 생성되기 전에 만들어지기 때문에 클래스 메소드가 인스턴스 멤버에 접근하는 것은 존재하지 않는 인스턴스 변수에 접근하는 것과 같다.
'줍줍 > 코딩하다 안거' 카테고리의 다른 글
mySQL LAST_INSERT_ID() (0) | 2019.06.17 |
---|---|
logback 설정 에러 (0) | 2019.06.06 |
로깅 설정 (0) | 2019.05.21 |
오류와 예외 (0) | 2019.05.15 |
Date와 Timestamp 차이 (0) | 2018.12.09 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- application context
- setter 인젝션
- 어노테이션
- postHandler
- LoggingEvent
- aspect oriented programming
- aop
- #java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent삭제
- 컨트롤러
- 의존성
- @Autowired
- ViewResolver
- afterCompletion
- 검색
- JoinPoint
- preHandler
- NoClassDefFoundError
- Controller
- handlermapping
- 횡단 관심
- exclude-mapping
- SqlSessionFactoryBean
- blocking
- 의존성 주입
- XmlWebApplicationContext
- multiple SLF4J bindings
- servlet context
- 스프링 컨테이너
- Class path contains multiple SLF4J bindings
- java.lang.NoClassDefFoundError: org/slf4j/event/LoggingEvent
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함