# 面向对象三个阶段
一、面向对象分析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();
}
}
```
最先执行静态块,在类加载的时候只被执行一次。项目:创建工厂,数据库初始化信息放入静态块,全局性初始化操作。
再执行构造块,不常用。
再执行构造器。
最后执行方法中的普通块。