자바의 상세한 클래스와 객체

프로세스 지향 및 객체 지향

  • C 언어는 프로세스 지향적이며 프로세스에 중점을두고 문제를 해결하는 단계를 분석하고 함수 호출을 통해 문제를 점진적으로 해결합니다.
  • JAVA는 객체 지향을 기반으로 객체에 초점을 맞추고 사물을 다른 객체로 분할하고 객체 간의 상호 작용으로 완성합니다.
  • 프로세스 지향은 프로세스에 초점을 맞추고 전체 프로세스에 관련된 동작은 기능입니다.
  • 객체 지향은 객체, 즉 참여 과정에 관련된 주제에 중점을 둡니다. 기능을 하나씩 연결하는 논리를 통해

[객체 지향 개념]

  1. 객체 지향은 문제에 대해 생각하는 방식이며 일종의 사고입니다. 예 : 개념 및 예. 이론과 실제. 이름과 현실 등등.
  2. 클래스는 객체 클래스에 대한 일반적인 용어입니다. 객체는 이러한 종류의 수정의 인스턴스입니다.
  3. 객체 지향의 이점 : 복잡한 것을 단순하게 만들려면 객체를 대면하십시오.

【객체 지향 디자인】

객체 지향 설계는 중요한 경험을 파악합니다 : 누가 데이터를 소유하고 누가 데이터를 조작 할 수있는 외부 방법을 제공하는지 (개인)! (수동 당사자는 데이터의 소유자이고 활성 당사자는 실행자입니다)

개발 중 : 개체를 찾고, 개체를 만들고, 개체를 사용하고, 개체 간의 관계를 유지합니다.

요약 : 객체 지향은 코드 (클래스)로 객관적인 세계에서 사물을 설명하는 방법입니다. 클래스는 주로 사물의 속성과 동작을 포함합니다.

클래스 및 클래스 인스턴스화

클래스는 객체 클래스에 대한 일반적인 용어입니다. 개체는 이러한 유형의 수정 인스턴스이며
클래스는 수많은 개체를 인스턴스화 할 수 있습니다.

아래에서는 클래스와 클래스의 인스턴스화를 이해하기 위해 예제를 사용합니다.

class Person {
    
    
    public int age;//成员属性 实例变量  字段  属性
    public String name;
    public static String sex;   //静态成员变量    方法区
    public void eat() {
    
    //成员方法
        System.out.println("吃饭!");
    }
    public void sleep() {
    
    
        System.out.println("睡觉!");
    }
    public static void func(){
    
    
    	System.out.println("静态成员方法");
    }
}
public class Main{
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person();//通过new实例化对象
        person.eat();//成员方法调用需要通过对象的引用调用
        person.sleep();
//产生对象 实例化对象
        Person person2 = new Person();
        Person person3 = new Person();

		//静态成员变量和方法的调用
		System.out.println(Person.sex);
		Person.func();
    }
}

멤버 변수 :
클래스 내부에 정의되고 메서드 외부는
객체 참조를 통해 액세스됩니다.
초기화되지 않은 경우 해당 값은 기본값 (기본값 0)입니다.

  • 참조 유형 인 경우 값은 null (배열, 문자열 문자열 등 포함)입니다.
  • 단순 유형 인 경우 값은 해당 유형에 해당하는 기본값입니다.
바이트 짧은 int 흙손 더블 부울
0 0 0 0L 0.0f 0.0 '\ u0000'16 진수 (0으로 취급 할 수도 있음) 그릇된

동작 / 메소드 :
[eat () sleep ()]은 인스턴스 멤버 메소드입니다.
func ()는 정적 멤버 메소드입니다.

정적 멤버 변수 및 멤버 메서드에 액세스하는 방법
여기에 사진 설명 삽입
여기에서 볼 수 있듯이 정적 개체에 대한 개체를 인스턴스화 할 필요없습니다 ! ! !

직접 전화

클래스 이름 정적 멤버 변수 / 정적 멤버 메서드

정적 요약 :

  1. 정적 멤버 속성 또는 정적 멤버 메서드의 경우 개체에 종속되지 않습니다 .
  2. 메서드 영역에 저장되는 정적 멤버 변수는 하나뿐입니다.
  3. 비 정적 데이터는 정적 메서드 내에서 액세스 할 수 없습니다.

인스턴스화 된 클래스의 저장 구조

여기에 사진 설명 삽입

멤버 변수를 초기화하는 방법

1. 내부 초기화 (클래스 내 공격적인 초기화)
여기에 사진 설명 삽입

2. 기본 초기화
여기에 사진 설명 삽입
3. 클래스 외부 초기화 (더 많이 사용됨)

public class Main{
    
    
    public static void main(String[] args) {
    
    
        Person person1 = new Person();
        person1.name = "星星";
        person1.age = 20;

        Person person2 = new Person();
        person2.name = "狒狒";
        person2.age = 40;
    }
}

캡슐화

코드를 작성할 때 종종 클래스 구현 자와 클래스 호출 자라는 두 가지 역할이 있습니다. 캡슐화의 본질은 클래스 구현자가 클래스를 구현하는 방법을 알고있는 한 클래스 호출자가 클래스를 구현하는 방법을 이해할 필요가 없도록하는 것입니다. 수업을 사용하십시오.

이는 학급 사용자의 학습 및 사용 비용을 줄여 복잡성을 줄입니다.

두 개의 키워드 private / public은 "액세스 제어"를 의미합니다.

  • public에 의해 수정 된 멤버 변수 또는 멤버 메서드는 클래스 호출자가 직접 사용할 수 있습니다.
  • private에 의해 수정 된 멤버 변수 또는 멤버 메서드는 클래스 호출자가 사용할 수 없습니다.

예를 들면

class Person {
    
    
    private String name = "张三";
    private int age = 18;
    public void show() {
    
    
        System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
}
class Test {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person();
        person.show();
    }
}
  • 이 시점에서 필드는 private로 꾸며졌고, 클래스의 호출자 (메인 메소드에서)는 직접 사용할 수 없으며 대신 show 메소드가 필요합니다. 이때 클래스 사용자는 이해할 필요가 없습니다. Person 클래스의 구현 세부 사항.
  • 동시에 클래스 구현자가 필드 이름을 수정하면 클래스 호출자는 변경할 필요가 없습니다 (클래스 호출자는 이름 및 연령과 같은 필드에 대한 액세스 권한이 전혀 없음).

getter 및 setter 메서드

Getter : 속성 값을 가져 오는 방법
setter : 속성 값을 수정하는
방법이 두 가지 방법을 사용하여 속성에 액세스하는 목적을 달성하기 위해 클래스의 속성을 캡슐화합니다.

class Person {
    
    
    private String name;//实例成员变量
    private int age;
    public void setName(String name){
    
    
//name = name;//不能这样写
        this.name = name;//this引用,表示调用该方法的对象
    }
    public String getName(){
    
    
        return name;
    }
    public void show(){
    
    
        System.out.println("name: "+name+" age: "+age);
    }
}
class Main {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person();
        person.setName("caocao");
        String name = person.getName();
        System.out.println(name);
        person.show();
    }
}

이 키워드

방금 코드에서 setter 메서드를 볼 수 있습니다.

private String name;
public void setName(String name){
    
    
		//name = name;//不能这样写
        this.name = name;//this引用,表示调用该方法的对象
}

이것은 현재 개체 참조를 나타내며이를 사용하여 개체의 필드 및 메서드에 액세스 할 수 있습니다
여기에 사진 설명 삽입
.

  1. this.attribute; // 현재 객체의 속성에 액세스
  2. this. method; // 현재 객체의 메소드 호출
  3. this (); // 현재 객체의 생성 메소드를 호출합니다 (ps :는 첫 번째 줄에 있어야하며 내부에는 생성 메소드가 하나만있을 수 있습니다)

시공 방법

생성 메소드는 초기화 작업을 완료하기 위해 new 키워드를 사용하여 새 객체가 인스턴스화 될 때 자동으로 호출되는 특수 메소드입니다.

개체를 인스턴스화 / 만들기 위해 몇 단계가 있습니까?
Student stu = new Student (); //
두 단계 로 객체 인스턴스화

  1. 개체에 대한 메모리 할당
  2. 적절한 구성 방법을 호출하여 하나 이상의 구성 방법이 있음을 나타냅니다.

문법 규칙

  1. 메소드 이름은 클래스 이름과 동일해야합니다.
  2. 생성자에 반환 값 형식 선언이 없습니다.
  3. 각 클래스에는 적어도 하나의 구성 방법이 있어야합니다 (명확하게 정의되지 않은 경우 시스템에서 매개 변수없는 구성을 자동으로 생성합니다)
class Person {
    
    
    private String name;//实例成员变量
    private int age;
    private String sex;
    //默认构造函数 构造对象
    public Person() {
    
    
        this.name = "caocao";
        this.age = 10;
        this.sex = "男";
    }
    //带有3个参数的构造函数
    public Person(String name,int age,String sex) {
    
    
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public void show(){
    
    
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }
}
public class Main{
    
    
    public static void main(String[] args) {
    
    
        Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
        p1.show();
        Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
        p2.show();
    }
}

toString 메서드

        Person person = new Person("caocao",19);
        System.out.println(person);

참조를 인쇄하면 그는 기본적으로 toString 메서드를 호출하고 다음 결과를 실행
여기에 사진 설명 삽입
합니다. 원하는 결과를 인쇄하도록 toString 메서드를 다시 작성할 수 있습니다.
예를 들면 다음과 같습니다.

class Person {
    
    
    private String name;
    private int age;
    public Person(String name,int age) {
    
    
        this.age = age;
        this.name = name;
    }
    public void show() {
    
    
        System.out.println("name:"+name+" " + "age:"+age);
    }
    //重写Object的toString方法
    @Override
    public String toString() {
    
    
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person("caocao",19);
        person.show();
        System.out.println(person);
    }
}

여기에 사진 설명 삽입
이렇게하면 원하는 내용에 따라 참조 인쇄가 출력됩니다.

익명 개체

익명 성은 단순히 이름이없는 객체를 의미합니다.

  • 참조되지 않는 개체를 익명 개체라고합니다.
  • 익명 개체는 개체를 만들 때만 사용할 수 있습니다.
  • 개체가 한 번만 사용되는 경우 나중에 사용할 필요가 없으며 익명 개체 사용을 고려할 수 있습니다.
new Person("caocao",19).show();//通过匿名对象调用方法

기능 : 객체에 의존하지 않으며, 클래스 이름을 통해 속성 또는 메서드를 호출하기 만하면됩니다.

코드 블록

  • 네이티브 코드 블록
  • 정적 코드 블록
  • 예제 코드 블록 / 구성 코드 블록
  • 동기 코드 블록 (다중 스레드)

네이티브 코드 블록 : 메서드 의 코드 블록

public class Main{
    
    
    public static void main(String[] args) {
    
    
        {
    
     //直接使用{}定义,普通方法块
            int x = 10 ;
            System.out.println("x1 = " +x);
        }
        int x = 100 ;
        System.out.println("x2 = " +x);
    }
}

정적 코드 블록 : 일반적으로 정적 멤버 속성을 초기화하는 데 사용됩니다.

//静态代码块
static {
    
    
count = 10;//只能访问静态数据成员
System.out.println("I am static init()!");
}

인스턴스 코드 블록 : 클래스에 정의 된 코드 블록 , 구성 코드 블록은 일반적으로 인스턴스 멤버 변수를 초기화하는 데 사용됩니다.

//实例代码块
{
    
    
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}

실행 순서

  1. 정적 코드 블록
  2. 예제 코드 블록
  3. 시공 방법

추천

출처blog.csdn.net/starry1441/article/details/113757382