面向对象编程 OOP
1.面向对象定义
1.以类的方式组织代码,以对象封装数据
2.属性+方法 构成类
3.面向过程:面向过程的思维模式是简单的线性思维,思考问题首先陷入第一步做什么、第二步做什么的细节中,这种思维模式适合处理简单的事情。
4.面向对象:面向对象的思维模式是分类思维模式。思考问题首先会解决问题需要哪些分类,然后对这些分
类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。适合处理复杂的问题,适合处理需要多人协作的问题。
5.对象:具体的事物
类:抽象的,是对对象的抽象
2.方法回顾和加深
1.方法的定义:
-
修饰符
-
返回值类型
-
break:跳出switch,结束循环 return:返回一个结果或者结束当前方法。 return后面也可以不带参数,不带参数就是返回空,目的是用于想中断函数执行。
-
方法名:注意规范
-
参数列表:(参数类型,参数名)...
-
异常抛出:
修饰符 返回值类型 方法名(参数类型 参数名){ //方法体 return 返回值; }
方法定义举例:
//return 返回一个结果 public String sayHello(){ return "Hell,World!"; } //return 结束方法 public void print(){ return; } public int max(int a ,int b){ return a>b?a:b; } //数组下标越界:Arrayindexoutofbounds public void readFile()throws IOException{ }
2.方法的调用:递归
-
静态方法 static 调用时候:类名.方法 static和类一起加载
-
非静态方法 把类实例化 new出来这个类 对象类型 对象名 = 对象值; 实例化之后才存在
Student student = new Student(); student.say(); //对象.方法名
类中方法之间的调用:1.非静态方法之间可直接调用 2.静态方法之间也可直接调用 3.静态方法不能调用非静态
-
形参和实参 //没听懂 需要重新听 P62
-
值传递和引用传递
-
this关键字:当前的对象 或者当前的类
3.类与对象的创建
1.类:包含属性,方法 同一个包下
使用new关键字初始化对象。除了分配内存空间外,还会给创建好的对象进行默认的初始化,以及对类中构造器的调用。
类是抽象的,需要实例化。 实例化: new Student();
类实例化后会返回一个自己的对象student1。student student1 = new Student();
student1 对象就是Student类的具体实例化。
类是抽象的,对象是具体的。
java 对象的创建和使用 必须使用 new 关键字创建对象。
Person person= new Person ();
使用对象(引用) . 成员变量来引用对象的成员变量。
person.age 使用对象(引用) . 方法(参数列表)来调用对象的方法。
-
setAge(23)
-
类中就是://静态的数据 //动态的行为
package oop.demo02; //每个类只能有一个public class,可以有其他的类。 public class Student { //属性 String name; int age; public void say(){ System.out.println("学生可以说话"); } public void run(){ System.out.println("学生可以跑步"); } } **************************************************************** package oop.demo02; public class Application {//所有类的测试类 public static void main(String[] args) { //类:抽象的,实例化 //实例化后回返回一个自己的对象! stu对象就是一个Student类的具体实例! Student stu = new Student(); stu.age = 10; stu.name = "张三"; System.out.println(stu.age); System.out.println(stu.name); } }
4.创建对象的内存分析
栈 stack: 1. 每个线程私有,不能实现线程间的共享! 2. 局部变量放置于栈中。 3. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:new出来的
-
放置new出来的对象! 2. 堆是一个不连续的内存空间,分配灵活,速度慢!
引用类型的概念 :
-
java中,除了基本数据类型之外的其他类型称之为引用类型。
-
java中的对象是通过引用来操作的。(引用:reference)说白了,引用指的就是对象的地址!
5.构造器
1.构造器:构造方法,进行创建对象时候必须要调用的。Alt + insert 快捷键
2.构造器的特点:
-
必须和类名字相同。
-
必须没有返回值类型,也不能写void.
3.一个类什么都不写,它也有一个方法,就是一个构造器。
public Person() { }
4.构造器作用:
-
使用new 关键字,本质是在调用构造器。
-
构造器中的代码执行后,给对象中的属性初始化赋值。
5.构造器使用原则:
一但定义了有参构造器,无参构造器必须显性定义。
原因:,如果我们手动的编写了一个构造器,那么编译后就不会添加任何构造器了。
6.构造器重载
使用有参构造器,在创建对象时候可以给属性赋值.
public class Student{ String name; public Student(){ name = "tom"; } public Student(String name){ this.name = name; //给属性赋值 } }
7.构造器之间的调用
使用this关键字,在一个构造器中可以调用另一个构造器的代码。
注意:this的这种用法不会产生新的对象,只是调用了构造器中的代码而已.一般情况下只有使用new关键 字才会创建新对象。
6. this关键字
1、this在类中的作用:
-
区别成员变量和局部变量
-
调用类中的其他方法
-
调用类中的其他构造器
区别成员变量和局部变量 public class Student{ String name; public void setName(String name){ //this.name表示类中的属性name this.name = name; } }
调用类中的其他方法 public class Student{ String name; public void setName(String name){ this.name = name; } public void print(){ //表示调用当前类中的setName方法 this.setName("tom"); } } // setName("tom")和this.setName("tom")的效果是一样的
调用类中的其他构造器: this的这种用法,只能在构造器中使用.普通的方法是不能用的.并且这局调用的代码只能出现在构造器中的第一句 public class Student{ String name; public Student(){ //调用一个参数的构造器,并且参数的类型是String this("tom");//只能在第一句中,不能放后面。 } public Student(String name){ this.name = name; } }
-
this关键字在类中的意义
this在类中表示当前类将来创建出的对象.
public class Student1 { String name; public Student1() { System.out.println("this出来的: "+ this); } public static void main(String[] args) { Student1 student = new Student1(); System.out.println("main方法的:"+student); } } //打印结果: this出来的: oop.demo02.Student1@4554617c main方法的:oop.demo02.Student1@4554617c
this和student打印的结果是一样的
变量student是从对象的外部执行对象,而this是 在对象的内部执行对象本身.
可以理解this.name代表的是成员变量,this.setName("tom")代表的是调用成员方法,
这俩句代码从本质上讲,和在对象外部使用变量student来调用是一样的,student.name和student.setName("tom")。
this和s打印出来的内存地址是一样的,使用==比较的结果为true。
7.类和对象的回顾
1.类是一个模板是抽象的。 对象是一个具体的实例。
2.方法:定义和调用。
3.对象的引用
引用类型:对象是通过引用来操作的,实际是一个地址。存在栈里,真实操作是在堆里。栈--->堆
基本类型:8大基本类型:整型:byte short int long 浮点型:double float 字符:char 布尔:boolean
4.对象属性:字段field 成员变量
默认初始化:
默认初始化:数字:0 0.0 char: u0000 boolean: false 引用 :null
修饰符 属性类型 属性名 = 属性值
5.方法:修饰符 返回值类型 方法名(参数类型 参数名){}
6.对象的创建和使用
-
必须用new关键字来创造对象,要用到构造器 . Person xue = new Person();
-
对象的属性 xue.name
-
对象的方法 xue.sleep()
7.类:
静态的属性
动态的方法
8.Java 的三大特征:
封装、继承、多态