# 面向对象三个阶段 一、面向对象分析OOA(Object Oriented Analysis) 对象:张三、李四、赵 抽取类:Person 类内部:属性(名词,静态特性)、方法(动词,动态特性) 二、面向对象设计OOD(Object Oriented Design) 类:Person 对象:具体类 三、面向对象编程OOP(Object Oriented Programming) # 局部变量和成员变量 ```java package com.wangyuedong; public class Student { int c; public void study(){ int num = 1; } } ``` 成员变量有默认初始值,局部变量没有默认初始值。 # 构造器 调用new时没有构造器,系统自定义构造器。显式构造器。 构造器重载 ```java public class Person { //名词 String name; int age; double height; double weight; public Person(){ //空构造器 } public Person(String name){ this.name = name; } public Person(String name, int age){ this.name = name; this.age = age; } public Person(String name, int age, double height){ this.name = name; this.age = age; this.height = height; } public Person(String name, int age, double height, double weight){ this.name = name; this.age = age; this.height = height; this.weight = weight; } //动词 public void eat(){ int num = 10; System.out.println("吃饭"); } } ``` # this 可修饰属性。可在一定情况下省略。 也可修饰方法。可在一定情况下省略。 this可以修饰构造器。可在一定情况下省略,必须放在第一行。 # static static可修饰属性。 在类加载过程中,会将静态内容加载到方法区的静态域,被所有类的对象共享。官方推荐访问对象为类名.属性名。应用场景:某些特定的数据在内存中共享。 类变量:静态属性 实例变量:非静态变量 static可修饰方法。 在静态方法中不能访问非静态属性,也不能访问非静态方法。不能使用this关键字。非静态方法可以使用对象名.方法名调用,一种;静态方法可以使用对象名.方法名和类名.方法名调用,两种。特殊main方法可直接调用静态方法。 # 类的代码块 - 普通块 - 构造块 - 静态块 - 同步块(多线程) ```java package com.wangyuedong; public class Test3 { //属性 int a; static int sa; //方法 public void a(){ System.out.println("---------a"); { //普通块 //作用范围 } } //构造器 public Test3(){ //null System.out.println("---------构造器"); } public Test3(int a){ this.a = a; } //代码块 //构造块 { System.out.println("---------构造块"); } //静态块 static { System.out.println("---------静态块"); } public static void main(String[] args) { Test3 t1 = new Test3(); t1.a(); Test3 t2 = new Test3(); t2.a(); } } ``` 最先执行静态块,在类加载的时候只被执行一次。项目:创建工厂,数据库初始化信息放入静态块,全局性初始化操作。 再执行构造块,不常用。 再执行构造器。 最后执行方法中的普通块。