面向过程&&面向对象(Object-Oriented Programming,OOP)
以类的方式组织代码,以对象的组织(封装)数据
- 面向过程:线性思维,步骤清晰的一步步处理简单问题
- 面向对象:分类的思维模式,将任务进行分工,以处理复杂的问题
-
封装
-
继承
-
多态
-
对象:具体的事物
-
类:对对象的抽象
-
从认识的角度:对象-------->类
-
从代码运行的角度:类--------->对象
- 首先创建一个类
public class Student {
//静态方法
public static void learn(){
System.out.println("The students are studying");
}
//非静态方法
public void play(){
System.out.println("The students are playing");
}
}
- 然后展示以上两种方法的调用
public static void main(String[] args) {
//静态方法 static
Student.learn();
//非静态方法:实例化这个类 new
//对象类型 对象名称 = new 对象类型();
Student student = new Student();
student.play();
}
- 同一个类中,静态方法和非静态方法之间调用存在问题,相同类型之间可以相互调用
public void a(){
b(); //因为a()和b()都是非静态方法,类实例化之后才存在,可以互相调用
}
public void b(){
}
public static void c(){
// b(); //会报错,因为静态方法和类一起加载,不能调用还没有实例化的非静态类
}
值传递和引用传递
public class Demoreview02 {
public static void main(String[] args) {
int a = 1;
System.out.println(a); //1
Demoreview02.change(a);
System.out.println(a);//1
System.out.println("======================");
Person person = new Person();
System.out.println(person.name);//null
Demoreview02.change(person);
System.out.println(person.name);//kim
}
//值传递
public static void change(int a){
a = 2; //没有返回值,操作不了对象
}
//引用传递,定义一个方法
public static void change(Person person){
person.name = "kim"; //没有返回值,但修改的是类里面的对象,可以修改成功
}
}
//引用传递,定义一个类
class Person{
String name;
}
类和对象的创建
- 创建一个类
//教师类
public class Teacher {
//属性:字段
String name;
int age;
//方法
public void teaching(){
System.out.println("The teacher is in class");
}
}
- 创建一个对象
//一个项目只应该存在一个main()方法
public class DemoApplication {
public static void main(String[] args) {
//类:抽象的,实例化
//类实例化后会返回一个自己的对象
//teacher对象就是一个Teacher类的具体实例
Teacher teacher = new Teacher();
System.out.println(teacher.name);
teacher.name = "jack";
teacher.age = 30;
System.out.println(teacher.name);
}
}
构造器详解
- 一个类即时什么都不写也会存在一个构造器(默认构造器,可以使用new)
- 构造器:和类名相同;没有返回值
- 没有有参构造器时,无参构构造器可以不写,直接使用
public Teacher() {
}
- 当存在有参构造器时,无参构造器必须写上,否则报错
public class Teacher {
String name;
//实例初始化
//构造器两个
public Teacher() {
}
public Teacher(String name) {
this.name = name; //this.name代表对象本身的name, 等号右边的name是构造器传递来的
}
}
- 构造器作用:new 本质上就在调用构造方法;初始化对象的值
- 以下代码,调用上面定义的类
public class DemoApplication {
public static void main(String[] args) {
//new 实例化一个对象
Teacher teacher = new Teacher();
System.out.println(teacher.name); //null
Teacher teacher1 = new Teacher("kim");
System.out.println(teacher1.name); //kim
}
}
- 构造器快捷键:Alt + Insert
- this. (这个类的值)= (参数传进来的)
- 创建一个类
public class Pet {
public String name;
public void shot(){
}
}
- 调用类
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.shot();
Pet cat = new Pet();
}
}
代码运行过程中内存分析
- 第一步,在方法区加载Application类中的main()方法到栈中
- 第二步,执行main()过程中,加载Pet模板
- 第三步,根据Pet模板在栈中生成了一个dog变量名,new在堆中生成一个对象,调用模板里的方法
- 第四步,赋值
- 同理添加引用变量名
-
类与对象:类是一个抽象的模板,对象是一个具体的实例
-
方法:先定义,再使用
-
对象的引用:对象是通过引用来操作的,在内存上就是 栈---------->栈
-
属性:类的成员变量,默认初始化 数字:0/0.0、char:u0000、boolean:false、引用:null 。 修饰符 属性类型 属性名 = 属性值
-
对象的创建和使用
-
必须使用new关键字创造对象,构造器 。对象类型 对象名 = new 对象类型()
-
对象的属性 对象名.属性名
-
对象方法 对象名.方法名()
-
类
-
静态的属性 属性
-
动态的行为 方法



