Day10 Java学习第十天--->面向过程 && 面向对象
面向过程 && 面向对象
面向过程思想
步骤清晰简单,第一步做什么,第二步做什么
面向过程适合处理一些较为简单的问题
面向对象思想
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考,最后,才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是具体到微观操作,仍然需要面向过程的思路去处理。
方法-->
结构--->
有共性的东西,再提取出来,这些方法加上一些属性--->类
例如:
面向过程:建房子(先做砖,再XXX,成本很高的)
面向对象:分类的思维,总设计师-去分任务,一些人去刷墙,一些人去搬砖,最底下的那些人还是面向过程的,但是这样整体的架构就很清晰
什么是面向对象
面向对象编程:oop
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
抽象
三大特性:
1.封装
2.继承
3.多态
从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
从代码运行角度考虑是先有类后有对象。类是对象的模板。
回顾方法及加深
-
方法的定义
修饰符
返回类型
break:跳出switch 结束循环 和return的区别
方法名:注意规范就OK,见名知意
参数列表:(参数类型,参数名)
异常抛出:
-
方法的调用:递归
静态方法
非静态方法
形参和实参
值传递和引用传递
this关键字
我在Student.java 中的Student类中,存在say(),但在main方法中想要调用的话,就要加上static修饰
public void say()--->public static void say()
--------------------------------------
public class staticDemo {
//静态方法 static
public static void main(String[] args) {
Student.say();
}
}
-------------------------------------------------
//学生类
public class Student {
//方法
public static void say(){
System.out.println("学生说话了");
}
}
如果是非静态方法,还想在main方法中使用的话,就要将这个类实例化
public static void main(String[] args) {
//Student.say();
Student st = new Student();
st.say();
}
//学生类
public class Student {
//方法
//public static void say()
public void say(){
System.out.println("学生说话了");
}
}
//static方法 和类一起加载的,但是非static方法,是类实例化之后才会存在的,一个存在的东西调用一个不存在的东西肯定会报错
public static void a(){
b();
}
public void b(){
}
如果都是static 那么在a里就可调用b方法
public static void a(){
b();
}
public static void b(){
}
值传递
public class Demo9 {
public static void main(String[] args) {
int a = 1;
System.out.println(a);
Demo9.change(a);
System.out.println(a);
}
//值传递:传递的是个值
//返回值为void
public static void change(int a){
a = 10;//这个a只是一个形式参数,相当于将这行代码走完了,走完之后又回到主方法
}
}
引用传递
//引用传递:传递的是对象,本质还是值传递
public class Demo10 {
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.name);
Demo10.change(person);
System.out.println(person.name);
}
//传递的是一个引用
//p是一个对象,指向的是--->Person person = new Person();这是一个具体的人,可以改变属性
public static void change(Person p){
p.name = "Tom";
}
}
//一个类里面只可以有一个public class
//可以有多个class类
//定义了一个Person类,有一个属性name
class Person{
String name;//null
}
类与对象的关系
1.类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物
动物,植物,手机,电脑
Person类,Pet类,Cat类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
2.对象时抽象概念的具体实例
张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例
能够体现出特点,展现出功能的是具体的实例,而不是从一个抽象的概念
创建与初始化对象
1.使用new关键字创建对象
使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象,进行默认的初始化以及对类中构造器的调用
2.类中构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
2.1必须和类的名字相同
2.2必须没有返回类型,也不能写void
public class Student{
//属性,字段
String name;//相当于抽象的模板
int age;
//方法
public void study(){
System.out.println(this.name+"在学习");
}
}
public class Application{
public static void man(String[] args){
//类是抽象的,需要将抽象的类给实例化出来
//类实例化后会返回一个自己的对象
//student对象就是一个Student类的具体实例
Student student = new Student();
Student xiaoming = new Student();
Student xiaohong = new Student();
//同一个Student类下,产生不同对象xiaoming,xiaohong,具有共同的属性
xiaoming.name = "小明";
xiaoming.age = 3;
System.out.println(xiaoming.name);//--null
System.out.println(xiaoming.age);
}
}
//学程序好,对时间进行更好的建模!----宅
构造方法(必须掌握)
public class Application {
//一个项目应该只存一个main方法
public static void main(String[] args) {
//new实例化一个对象
Person person = new Person();
System.out.println(person.name);
}
}
public class Person {
//一个类内部要是什么都不写,它也会存在一个方法
String name;
//实例化
public Person(){
this.name = "TOM";
}
}
打断点,看内存中发生了什么
main:7, Application args = {String[0]822}
---------------------------------------------
<init>:8, Person this = {Person
构造器总结
-
使用new关键字,本质调用构造器
-
有参构造:
一旦定义了有参构造,那么必须显示定义无参构造
3.构造器,用来初始化值
//IDEA 快捷键
alt+insert
对象在内存中的反应
类与对象总结
1.类是一个模板,抽象。对象是一个具体的实例
2.方法:
定义,调用
3.对应的引用
引用类型 基本类型(8)
对象是通过引用来操作的:栈--->堆
4.属性:field 成员变量
默认初始化: 0 0.0
char u0000
boolean false
引用 null
修饰符 属性类型 属性名 = 属性值
5.对象的创建和使用
必须使用new 关键字创造对象,构造器 Person person = new Person();
对象的属性:person.name
对象的方法:person.sleep()
6.类:
静态的属性: 属性
动态的行为: 方法