Day10 Java学习第十天--->面向过程 && 面向对象

面向过程 && 面向对象

面向过程思想

步骤清晰简单,第一步做什么,第二步做什么

面向过程适合处理一些较为简单的问题

面向对象思想

物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考,最后,才对某个分类下的细节进行面向过程的思索。

面向对象适合处理复杂的问题,适合处理需要多人协作的问题

对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是具体到微观操作,仍然需要面向过程的思路去处理。

方法-->

结构--->

有共性的东西,再提取出来,这些方法加上一些属性--->类

例如:

面向过程:建房子(先做砖,再XXX,成本很高的)

面向对象:分类的思维,总设计师-去分任务,一些人去刷墙,一些人去搬砖,最底下的那些人还是面向过程的,但是这样整体的架构就很清晰


什么是面向对象

面向对象编程:oop

面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据

抽象

三大特性:

1.封装

2.继承

3.多态

从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象

从代码运行角度考虑是先有类后有对象。类是对象的模板。


回顾方法及加深

  1. 方法的定义

    修饰符

    返回类型

    break:跳出switch 结束循环 和return的区别

    方法名:注意规范就OK,见名知意

    参数列表:(参数类型,参数名)

    异常抛出:

  2. 方法的调用:递归

静态方法

非静态方法

形参和实参

值传递和引用传递

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@824}
main:7, Application    this.name = null
---------------------------------------------
<init>:9, Person       this.name = null
main:7, Application
---------------------------------------------
<init>:10, Person      this.name = "TOM"
main:7, Application
---------------------------------------------
main:7, Application    args = {String[0]822}
---------------------------------------------
main:8, Application    args = {String[0]822}
                      Person = {Person@824}
                      person.name = "TOM"
---------------------------------------------
main:9, Application    args = {String[0]822}
                      Person = {Person@824}
                      person.name = "TOM"
---------------------------------------------

构造器总结

  1. 使用new关键字,本质调用构造器

  2. 有参构造:

    一旦定义了有参构造,那么必须显示定义无参构造

3.构造器,用来初始化值

//IDEA 快捷键

alt+insert


对象在内存中的反应

image-20210526094826097


类与对象总结

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.类:

静态的属性: 属性

动态的行为: 方法

posted @ 2021-05-27 16:15  长高不是梦  阅读(197)  评论(0)    收藏  举报