0. 객체 지향: OO:
0. OOA(객체 지향 분석) OOD(객체 지향 설계) OOP(객체 지향 프로그래밍)
1. 있음 소프트웨어 개발 방법
2. 확장 영역: 데이터베이스 시스템, 대화형 인터페이스, 응용 플랫폼, 분산 시스템, 인공 지능 및 기타 분야
3. 현실 세계에 대한 이해와 이해 추상적인 방법이 제품 컴퓨터 프로그래밍 기술의 발전을 특정 단계까지
1. 클래스와 객체의 기본 개념
1. 클래스: 클래스는 다음을 포함하는 한 쌍의 객체입니다. 유사 속성 사물의 클래스를 추상화한 것입니다. 클래스는 유사한 성격을 가진 사물(즉, 클래스의 구성원)의 속성(특성)과 메서드(동작)를 캡슐화합니다.
2. 객체: 객체는 사물의 클래스 내 특정 개체
3. 클래스 - 개체 관계 참조 모집단 - 개체
4. 클래스 구성: 0개 이상의 멤버 변수 0개 이상의 메서드 Zero 또는 다중 생성자
멤버 변수: 클래스 또는 클래스 인스턴스에 포함된 상태 데이터를 정의합니다.
메소드: 클래스 또는 클래스 인스턴스의 동작 특성 또는 기능적 구현을 정의하는 데 사용됩니다.
생성자: 이 클래스의 인스턴스를 생성하는 데 사용됩니다(생성자에 대해서는 나중에 설명합니다)
5. 객체 생성 및 사용:
일단 생성되면 사용할 수 있습니다. .Java 객체는 일반적으로 객체의 인스턴스 변수에 접근하고 객체의 메소드를 호출하는 기능을 가지고 있습니다.
객체를 생성하는 기본적인 방법은 생성자를 통해 new 키워드를 호출할 수 있습니다. 이 클래스의 인스턴스(객체)를 만듭니다.
개체 이름.인스턴스 변수 | 메서드
클래스 이름. 클래스 변수 메서드
6. 일반 엔터티 클래스 예 Dog.java ; 객체 선언 및 생성; 프로그램 입력 클래스(메인 클래스), 메인 메소드가 있는 클래스
7. 사람(장산)이 길을 걷다가 개(대황)을 만났습니다. ), 개(대황)가 남자(장산)를 물고, 남자(장삼)가 개(대황)를 때리고, 개(대황)가 도망갔습니다~!
package Chapter7_2; //Dog类的申明 public class Dog { String name; public void beatPersion(People p){ System.out.println(name+"咬了"+p.name); } public void dogRun(){ System.out.println(name+"跑了......"); } } package Chapter7_2; //People类的申明 public class People { String name; public void walk(){ System.out.println(name+"街上散步"); } public void meetDog(Dog dog){ System.out.println(name+"遇到"+dog.name); } public void beatDog(Dog dog){ System.out.println(name+"打了"+dog.name); } } package Chapter7_2; //主类 public class DogAndPeople { public static void main(String[] args) { People peo=new People(); Dog dog =new Dog(); peo.name="张三"; dog.name="大黄"; peo.walk(); peo.meetDog(dog); dog.beatPersion(peo); peo.beatDog(dog); dog.dogRun(); } }
2. 연습: 자동차 클래스, 자동차의 속성(브랜드 마크, 배기량, 색상, 가격)을 설명합니다.
및 방법(시동, 속도 향상, 일반 주행, 히트(사람) 발생)
속성(이름, 성별, 나이)을 갖는 People 클래스 작성,
메소드(운전(자동차), Car 클래스 객체를 매개변수로 사용),
메인 수업
1) 장산(Zhang San)에게 BMW 자동차를 몰고 거리를 질주하게 하세요
2) 리시(Li Si)라는 남자를 만났습니다
package Chapter7_3; //定义Car类 public class Car { String mark; int power; String color; int price; public void start(People p) { System.out.println(p.name + "启动了"+mark); } public void speedUp(){ System.out.println(mark+"加速"); } public void run(){ System.out.println(mark+"正常行驶"); } public void hit(People p){ System.out.println(mark+"撞了"+p.name); } } package Chapter7_3; //People类申明 public class People { String name ; char sex; short age; public void dirve(Car car){ System.out.println(name+"驾驶"+car.mark); } } package Chapter7_3; //主类 public class CarAndPerple { public static void main(String[] args) { Car car=new Car(); People p1=new People(); People p2=new People(); car.color="black"; car.mark="宝马"; car.power=123; car.price=123143; p1.age=20; p1.name="张三"; p1.sex='m'; p2.age=21; p2.name="李四"; p2.sex='m'; car.start(p1); car.speedUp(); p1.dirve(car); car.run(); car.hit(p2); } }
3. 클래스 및 객체 사용 요약
1. 유사한 특성(속성)과 동작(메서드)을 가진 유형을 추상화하여 클래스 ri로 캡슐화합니다
2. 비즈니스 요구에 따라 특정 객체를 인스턴스화(신규)
3. 특정 객체의 특성을 얻기 위해 객체를 초기화하고 값을 할당합니다
4. 다음에 따라 비즈니스는 객체 간의 행위(메서드)를 결합해야 합니다
4. 멤버 변수와 로컬 변수
1. 멤버 변수는 클래스에 정의됩니다. , 전역 변수라고도 하며 유효 범위는 클래스 본문 전체입니다
2. 지역 변수는 메서드 내부에 정의되고 범위는 메서드 내부에 있습니다
3. 지역 변수와 멤버 변수 이름이 동일한 경우 지역 변수가 위치한 메서드에서 멤버 변수가 숨겨집니다. 이 메소드에 숨겨진 글로벌(멤버) 변수를 사용해야 할 경우 this 키워드
를 사용해야 합니다. 로컬 변수와 멤버 변수의 이름이 같은 경우 멤버 변수를 호출하면 됩니다. 지역변수가 위치한 코드블럭에서
5. 메소드 설계에 대하여
1. 메소드의 속성
2. 메소드 구성 : 접근 한정자 반환 값 메소드 이름 메소드 매개변수 목록
3. 오버로딩 : 메소드 오버로딩은 클래스 내에 같은 이름의 메소드가 여러 개 있을 수 있다는 뜻이지만, 이러한 메소드의 매개변수는 서로 달라야 합니다. 즉, 매개변수의 개수가 다르거나 매개변수 유형이 달라야 합니다.
연습문제: 간단한 계산기(숫자 2개, 3개, 4개 더하기 가능)
6. 작도법( 생성자)
1. 공법이란 무엇인가요? 특징은 무엇입니까?
2. 공법의 역할은 무엇인가요?
3. 생성자는 언제 호출되나요?
예: 7
연습: 8
4. 생성자가 오버로드될 수 있나요?
5. 기타 지침:
생성자는 객체를 생성하는 중요한 방법입니다. 클래스에는 생성자가 하나 이상 포함되어야 합니다.
程序员如果不给一个类加构造器,则系统会默认添加一个没有参数的构造器
7.示例:建立一个学生类,有学号、姓名、年龄、性别属性,有描述个人信息的方法,通过键盘输入获取两个学生的信息,并且打印出描述信息
略
8.构建一个员工信息类(Employee),有员工编号、员工姓名、性别、年龄、工龄、工资等属性,有工作和休息的方法,还有打印自身信息的方法;
在入口类中通过键盘输入,获取两个员工的对象,要求通过带参数的构造方法来进行成员变量的初始化。然后根据输入星期几,来输出员工当前的状态(周一至周五工作、周六和周日休息)
package Chapter8_2; //所有类与方法在同一个文件中 import java.util.Scanner; public class Staff { int number; String name; char sex; short age; short w_age; long mon; public Staff(String name, int number, char sex, short age, short w_age, long mon) { this.name = name; this.number = number; this.sex = sex; this.age = age; this.w_age = w_age; this.mon = mon; } public void rest() { System.out.println(name + "今天休息"); } public void work() { System.out.println(name + "今天工作"); } public void printSelf() { System.out.println(name + "\t" +number+"\t" +sex + "\t" + age + "\t" + w_age + "\t" + mon + "\t"); } public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入第一个员工的信息:姓名,工号,性别,年龄,工龄,工资"); String name = scan.next(); int number = scan.nextInt(); char sex = scan.next().charAt(0); short age = scan.nextShort(); short w_age = scan.nextShort(); long mon = scan.nextLong(); Staff sta = new Staff(name, number, sex, age, w_age, mon); System.out.println("今天星期几"); short day = scan.nextShort(); if (day < 6) { sta.work(); } else if (day >= 6 && day <= 7) { sta.rest(); } else { System.out.println("error!"); } System.out.println("员工信息如下"); System.out.println("姓名"+"\t"+"工号"+"\t"+"性别"+"\t"+"年龄"+"\t"+"工龄"+"\t"+"工资"); sta.printSelf(); } }
9.变量、方法的分类:
内存的分配:栈内存 堆内存
创建对象时,通过new关键字调用构造函数,返回当前类的对象:People p=new People();
对象里有成员变量,会在堆内存中开辟连续的空间存储成员变量。
p是People类型的引用,p存储在栈内存中,它指向堆内存中的对象
这种引用就是C语言中的指针,只是Java语言把这个指针封装了起来
变量:成员变量 局部变量
成员变量:类变量(有static关键字修饰) 和 实例变量(没有static关键字修饰)
局部变量:形参、方法内的变量、代码块的变量
方法:类方法(有static关键字修饰)、实例方法(没有static关键字修饰)
java中类的生命周期:加载(Loading)-->验证(Verification)-->准备(Preparation)-->解析(Resolution)-->
初始化(Initialization)-->使用(Using)-->卸载(Unloadling)
1、类变量和实例变量的区别:类变量共享 ,类变量在类加载时分配入内存;实例变量每个对象独有 ,实例变量在类初始化的时候分配内存。
2、类方法和实例方法的区别:类方法在类加载时分配入口地址;实例方法在类初始化时分配入口地址 (创建第一个对象时)
3、访问和调用规则:
1、实例方法既能能访问实例变量又能访问类变量
2、类方法只能访问类变量
3、实例方法能调用类方法,但是类方法只能调用类方法
10.对象默认初始化
11.总结
1.类的概念、对象的概念;通过群体和个体的概念理解类和对象的关系
2.类的成员包括—— 属性、方法 (有啥,能干啥)
3.方法的设计
a.方法名首字母小写;望文生义;多个单词组成的方法名首字母小写,第二个单词开始首字母大写
b.返回类型
c.方法的重载(参数的不同,要么参数个数不同,要么参数类型不同)
4.成员变量和局部变量的区别;this关键字的作用(this相当于对象自身的意思)
5.关于构造方法
a.每一个类都有构造方法,不写不代表没有(默认无参的构造方法)
b.构造函数与new关键字息息相关,直接决定了对象的构成方式
c.带参数构造方法的常用方式(给成员变量进行赋值)
6.实例变量和类变量、实例方法和类方法;关键字static
13.作业
1.比较大小:写一个有两个int型的参数的方法,要求方法能够比较这两个参数的大小,并且返回比较大的一个,在另外一个类里使用这个方法。
2.判断 :在一个类里有一个方法,能判断给定的参数是否为偶数,如果是偶数返回true,否则返回false。在另一个类里调用该方法。
3.写一个方法,有三个参数,分别为三个线段的长度,判断三条线段是否能组成一个三角形,如果能返回true,否则返回false。在另一个类中使用
4.写一个三个参数的方法,判断给定的三个参数能否构成直角三角形。另一个类里使用。