面向过程&面向对象
-
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理
什么是面向对象
-
面向对象编程(Object-Oriend Programming,OOP)
-
面向对象的编程的本质就是:以类的方式组织代码,以对象的形式封装数据
-
抽象
-
三大特性
-
封装
-
继承
-
多态
-
回顾方法及加深
方法的定义
-
修饰符
-
返回值
package com.baidu.opp1; import java.io.IOException; //O1: 类 public class O1 { //main 方法 public static void main(String[] args) { } /* 修饰符 返回值类型 方法名(.....){ //方法体 return 返回值; } */ //结束方法,返回一个结果 public String sayHello(){ return "Hello World"; } public void print(){ return; } public int max(int a,int b){ return a>b?a:b;//三元运算符! } //数组下标越界异常:Arrayindexoutofbounds public void readFile(String file) throws IOException{ } }
-
break和return的区别
-
方法名:注意规范!见名知意
-
参数列表
-
异常抛出:
public void readFile(String file) throws IOException{ }
方法的调用
-
静态方法
package com.baidu.opp1; public class O2 { public static void main(String[] args) { //实例化这个类 new //对象类型 对象名=对象值; Student student=new Student(); student.say(); } //和类一起加载 public void a(){ b(); } //类实例化之后才存在 public void b(){ } }
-
非静态方法
package com.baidu.opp1; //学生类 public class Student { //非静态方法 public void say(){ System.out.println("学生说话了"); } }
-
形参与实参
package com.baidu.opp1; public class O3 { public static void main(String[] args) { //实际参数和形式参数的类型要对应 int add = O3.add(1,2); System.out.println(add); } public static int add(int a,int b){ return a+b; } }
-
值传递和引用传递
-
值传递
package com.baidu.opp1; //值传递 public class O4 { public static void main(String[] args) { int a=1; System.out.println(a); O4.change(a); System.out.println(a); } public static void change(int a){ a=10; } }
-
引用传递
package com.baidu.opp1; //引用传递:对象,本质还是值传递 public class O5 { public static void main(String[] args) { Person person = new Person(); System.out.println(person.name);//null O5.change(person); System.out.println(person.name); } public static void change(Person person){ //perosn是一个对象;指向-->Person person=new Person();这是一个具体的人,可以改变属性! person.name="猫"; } } //定义了一个Person类,有一个属性:name class Person{ String name; }
-
类与对象的关系
-
类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表一个具体的事物
-
对象是抽象概念的具体实例
创建与初始化对象
-
使用 new关键字创建对象
-
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
package com.baidu.opp2; //学生类 public class Student { //属性;字段 String name; int age; //方法 public void study(){ System.out.println(this.name+"在学习"); } }
package com.baidu.opp2; //一个项目应该只有一个main方法 public class App { public static void main(String[] args) { //类:抽象的,实例化 //类实例化后会返回一个自己的对象! //student对象是一个Student类的具体实例 Student xiaom = new Student(); Student xaioh = new Student(); xiaom.name="小米"; xiaom.age=12; System.out.println(xiaom.name); System.out.println(xiaom.age); } }
构造器详解
-
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点
-
必须和类名相同
-
必须没有返回类型,也不能写void
-
package opp.opp2; public class Person { //一个类型即使什么都不写,它也会存在一个方法 //显示的定义构造器 String name; /* 1.使用new关键字,本质是在调用构造器 2.用来初始化 */ public Person(){ this.name="mao"; } //有参构造:一旦定义了有参构造,无参就必须显示定义 public Person(String name){ this.name=name; } } /* public static void main(String[] args) { Person person = new Person("xai"); System.out.println(person.name); } 构造器: 1.和类名相同 2.没有返回值 作用: 1.new本质在调用构造方法 2.初始化对象的值 注意点: 1.定义有参构造之后,如果想使用无参构造,显示定义一个无参的构造 构造快捷键:Alt+Insert */
创建对象内存分析
package opp.opp3; public class Pet { String name; int age; public void shout(){ System.out.println("叫了一声"); } }
package opp.opp3; public class App { public static void main(String[] args) { Pet dog = new Pet(); dog.name="旺财"; dog.age=4; dog.shout(); System.out.println(dog.age); System.out.println(dog.name); } }