【狂神说Java】学习笔记15:面向对象编程(上)
【狂神说Java】学习笔记15:面向对象编程
[01] 初识面向对象
[02] 方法回顾和加深
[03] 对象的创建分析
[04] 面向对象三大特征(重点)
[05] 抽象类和接口
[06] 内部类和OOP实战
--------------------------------------------------------------------
面向对象编程
[01] 初识面向对象
属性加方法就是类。
面向过程思维:是一个线性思维,第一步做什么,第二部做什么,步骤明确。
面向对象思维:分类的思维方式。统筹各个部门做什么。
比如一个人可做事情,其中一个上厕所就属于方法,调用方法就去上厕所,具体怎么上就是面向过程一步步走了。
宏观把握,处理复杂的多人协作事务 →→→ 面向对象
具体到微观操作,具体思路细节的分析 →→→ 面向过程
什么是面向对象
・面向对象编程本质:以类的方式组织代码,以对象的组织(封装)数据。 ←重要
・三大特性:
封装:用麻袋把小球装起来,然后留个口(接口)去拿取(调用)。
继承:子类继承父类的东西。
多态:同一个事物的多种形态。跑步有人擅长,有人不能跑。
[02] 方法回顾和加深
方法的定义
方法的基础概念,修饰符,返回值类型等等
只要方法里实行到return,就代表这个方法结束了,以下的都不会运行了。
package oop.demo01;
import java.io.IOException;
// 方法的基础概念,修饰符,返回值类型等等
// Demo01 就是类(class)
public class Demo01 {
// 核心方法-main方法。
public static void main(String[] args) {
//
}
/*
修饰符 返回值类型 方法名(...){
// 方法体
return 返回值;
}
*/
public String sayHello(){
return "hello,world";
}
// void 的话可以不写返回,或者只写个return即可返回空值
// return 结束方法,并返回一个结果。
public void hello(){
return;
}
// 比大小的方法,int a和int b是形式参数,别人可以传进来调用。
public int max(int a,int b){
return a>b? a : b ; //三元运算符!a>b的话返回a,否则返回b
}
// 异常处理例子。读文件方法抛出throws 读写的异常IOException,
public void readFile(String file) throws IOException{
}
}
方法的调用
以下5个内容。
静态方法和非静态方法
I 方法的调用分两种:
1.静态方法
方法上加了static,可以直接调用。
2.非静态方法
没加static,实例化之后才能调用。
II.拓展延伸:静态方法里不能调用非静态方法。必须非静态方法实例化之后才行。
形参和实参
package oop.demo01;
public class Demo03 {
public static void main(String[] args) {
// 形参和实参的认识。本实例中实参1和2,形参a和b,且实际参数和形式参数的类型要对应。
// 调用 加方法 ,并输出结果。
int add = Demo03.add(1, 2);
System.out.println(add);
}
// 加方法,返回int类型的a和b的值。
public static int add(int a,int b){
return a+b;
}
}
----------------------
3
值传递和引用传递
值传递:java里都是值传递。
引用传递 :传递的是对象,本质还是值传递
package oop.demo01;
public class Demo05 {
// 1.引用传递:传递的是对象,本质还是值传递
public static void main(String[] args) {
Person person = new Person(); //3.实例化Person
System.out.println(person.name); // 4.此时什么都没,默认值是null
Demo05.change(person); //6.实行类里的change方法,并把参数person传进去。
System.out.println(person.name); //7.此时正常输出Alvin名字。
}
//5.设定change名字的方法。
public static void change(Person person){
//8.person是一个对象,指向的是 →→→ Person person = new Person();这个具体的人,可以改变属性。
person.name="Alvin";
}
}
//上面那个是public class(一个类里只能有一个),下面是新建的class(可有好几个)。
//2.定义一个Person类,有一个属性name
class Person{
String name;
}
----------------------------------------------------
null
Alvin
this关键字
this关键字是代表当前的类和当前的对象。
回头放到继承多态里说。
【疑问总结】
a.为什么开发的时候不是直接写好静态方法呢?这样调用更简单。
b.为什么要实例化才可以用?实例化到底做了什么?
c.静态方法是(类名.方法名),非静态方法是(对象名.方法名),有什么区别。
d:引用传递的时候传递的对象到底是什么?和内存的关系是什么? (对象和内存回头重点讲)