1.자료형 (byte)
boolean(1)
char(2)
int(4)
long (8)
float(4)
double(8)
2.문자열 비교
문자열의 값을 비교할때는 equals 를 사용해야 함.
String a = "hi";
String b = new String("hi");
System.out.println(a.equals(b));
System.out.println(a==b);
문자열 a와 b는 문자열 "hi"
equals => true
== 연산자 =>false. :a와 b는 같은값이지만 서로 다른 객체이기 때문. 자료형이 동일한 객체인지를 판별할 때 ==사용
3.객체지향 프로그래밍: oop //자바는 oop
-클래스,객체, 인스턴스
-상속
-인터페이스
-다형성
-추상화
4.클래스
클래스는 객체(object)를 생성한다.
public class Vehicle{
Vehicle bike= new Vehicle();
}
:객체(object) vs 인스턴스(instance)
bike만을 지칭할때 객체: bike는 객체
bike과 vehicle과의 상관관계를 설명할때 인스턴스: bike는 vehicle의 인스턴스
(클래스는 붕어빵틀, 객체는 붕어빵)
:필드와 객체는 뭐가 다른가?
public class Vehicle{
String name; //name은 객체변수, 인스턴스 변수,멤버 변수, 속성
public static void main(String[] args){
Vehicle bike= new Vehicle();
System.out.println(bike.name); //bike 객체, name 객체변수
}
}
결과값: null
아직 name 선언만 하고 대입을 안함 (대입하는 가장 보편적인 방법: 메소드)
public class Vehicle {
String name; // name은 객체변수, 인스턴스 변수,멤버 변수, 속성
public void Setname(String name) {
this.name = name;
}
public static void main(String[] args) {
Vehicle bike = new Vehicle();
System.out.println(bike.name); // bike 객체, name 객체변수
}
}
public static은 어디에 있는가.??
이건 입력은 String name이 있는데 출력은 없는(void만 있다). 메소드
이클립스에서 컨트롤+쉬프트+F 누르면 알아서 정렬된다.
public class Vehicle {
String name; // name은 객체변수, 인스턴스 변수,멤버 변수, 속성
public void SetName(String name) {
this.name = name;
}
public static void main(String[] args) {
Vehicle bike = new Vehicle();
bike.SetName("boby"); //대입해줌. 객체.메소드
System.out.println(bike.name); // bike 객체, name 객체변수
}
}
bike.SetName("body")
this.name=name;에서
this.name="body";로 변경
SetName 메소드에서 사용된 this는 Vechicle 클래스에 의해 생성된 객체를 지칭한다(bike)
bike.SetNmae("body")에서 bike객체에 의해 SetName 메소드를 호출하면, SetNname 메소드의 this는 bike를 가리키게 된다.
bike.name="body";로 변경
그럼 Vehicle 클래스를 실행하면 body가 출력되는 것을 볼수있다.
public class Vehicle {
String name; // name은 객체변수, 인스턴스 변수,멤버 변수, 속성
public void SetName(String name) { // 메소드 (void)
this.name = name;
}
public static void main(String[] args) {
Vehicle bike = new Vehicle();
bike.SetName("boby");
Vehicle board = new Vehicle(); // 객체만들기. 메인에서만 되나?
board.SetName("happy"); // 객체.메소드
System.out.println(bike.name); // bike 객체, name 객체변수
System.out.println(board.name);
}
}
bike이외에 board 추가하기.
출력값
body
happy
이클립스에 반드시 컨트롤+s로 저장하고 run하도록 하자.
5.메소드
public 리턴자료형 메소드형( 입력자료형1 입력변수1, 입력자료형2 입력변수2) {
return 리턴값; //리턴자료형이 void이면 return문이 없다.
}
메소드의 입출력유무에 따른 4가지 분류
-입력ㅇ 출력ㅇ : 가장 common
pulblic int sum(int a, int b){
return a+b;
}
Test myTest=new Test(); //Test 클래스. 객체 myTest
int c= myTest.sum(a,b); //리턴값받을 변수=객체.메소드명(입력인수1,입력인수2);
-입력 x 출력o :리턴값이 있어서 메인메소드에서 지정해줘야한다.
public String say(){
return "Hi";
}
Test myTest=new Test(); //클래스 객체
String a=myTest.say(); //데이터타입 변수= 객체.메소드명()
System.out.println(a); //변수 그대로 대입
-입력 o 출력 x (void는 리턴값이 없는경우)
public void sum(int a, int b){
System.out.println(a+"과" +b+"의 합은" +(a+b)+"입니다."); //return값이 없다. void가 잇다.
}
Test myTest=new Test();
myTest.sum(3,4); //객체.메소드(인수1,인수2);
>>3과 4의 합은 7입니다.출력
sysout은 메소드 내에서만 사용되는 문장이고, 돌려주는 값이 없다.
문자열을 출력한다 != 리턴값이 있다.
return만 돌려주는값이 있다.
-입력 x 출력 x
public void say(){
System.out.println("HI");
}
void: 입력값이 없다.
Test myTest=new Test(); //클래스명 객체지정
myTest.say(); //객체.메소드명();
이렇게 한가지 방법으로만 사용된다. 객체. 메소드명();
-리턴의 또다른 사용법
public void say_nick(String nick) {
if ("fool".equals(nick)) {
return;
}
System.out.println("나의 별명은 "+nick+" 입니다.");
}
: say_nick이라는 메소드는 nick이란 객체변수를 받아서 문자열만 출력하는 메소드. 리턴값 없음.
if 조건문에서 입력값이 fool일 경우, true값이 되어 문자열 출력없이 메소드를 빠져나간다.
특정조건에서 메소드를 탈출하고 싶은경우 return문을 이용한다. (void형인 경우만 가능. 리턴자료형 명시안된)
class Test {
public void vartest(int a) { //vartest라는 메소드. return이 없는 void이므로 입력o 출력x 메소드
a++;
}
public static void main(String[] args) {
int a = 1; //객체변수 a
Test myTest = new Test(); //객체
myTest.vartest(a); //객체.메소드명(인수);
System.out.println(a);
}
}
1
메소드 안의 변수는 메소드 안에서만 쓰인다.
그래서 vartest 메소드 안의 a++는 vartest안에서만 유효함.
class Test {
public void vartest(int b) {
b++;
}
public static void main(String[] args) {
int a = 1;
Test myTest = new Test();
myTest.vartest(a);
System.out.println(a);
}
}
그래서 이렇게 vartest 변수를 b로 바꾼것과 완전히 동일하다.
메소드 내에서만 쓰는 변수를 '로컬변수'라고 함.
public int vartest(int a) { //void가 int로 바뀜
a++;
return a; //return a가 생김
}
public static void main(String[] args) {
int a = 1;
Test myTest = new Test();
a = myTest.vartest(a); //객체변수 a를 새로 지정함
System.out.println(a);
}
만약에 메인에서 a++을 쓰고 싶다면 이렇게 return을 설정해주면 된다.
2
비교>>
public class Test {
int a; // 클래스의 객체변수 a (원래는 메인에서 선언)
public void vartest(Test test) { //Test 클래스의 객체를 입력받아 객체변수a를 증가.
test.a++; //vartest메소드의 입력 파라미터가 값이(value) 아닌 Test클래스의 객체
} //myTest 객체의 객체변수 a의 값이 증가
public static void main(String[] args) {
Test myTest = new Test();
myTest.a = 1;
myTest.vartest(myTest); //Test클래스의 객체인 myTest를 메소드에 전달
System.out.println(myTest.a);
}
}
public class Test {
int a; // 객체변수 a
public void vartest() {//this로 접근할 수 있으므로 객체변수도 필요없다. Test test
this.a++;
}
public static void main(String[] args) {
Test myTest = new Test();
myTest.a = 1; //객체.객체변수
myTest.vartest(); //객체.메소드명();
System.out.println(myTest.a);
}
}