Java面向对象01


面向对象编程

java的核心思想就是OOP

初识面向对象

面向过程&面向对象

面向过程思想

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

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

面向对象思想:

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

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

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

什么是面向对象?

  • 面向对象编程(Object-Oriented Programming, OOP)

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

  • 抽象

  • 三大特性:

    1. 封装

    2. 继承

    3. 多态

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

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

方法回顾和加深

  • 方法的定义

    ◆修饰符 ◆返回类型 break( 跳出switch,结束循环)和return的区别 ◆方法名:注意规范就OK (见名知意) ◆参数列表:(参数类型, 参数名)(...可变长参数,直接通过...来定义,...要放到形参最后) ◆异常抛出

  • 方法的调用:递归 ◆静态方法 ◆非静态方法 ◆形参和实参 ◆值传递和引用传递

值传递就是真实值在传递的时候传递的是他的副本,而不是其本身,所以在方法内改变其值并不会真正改变

◆this关键字(继承和多态时说)

//非静态方法
public void say(){
   System.out.println("学生说话了");
}
-------------------------------------------------
   public static void main(String[] args) {
       //实例化这个类 new
       //对象类型 对象名=对象值
       Student student=new Student();
       student.say();
   //new Student().say()
   //静态方法
  public static void say(){
       System.out.println("学生说话了");
  }
-------------------------------------------------
   public static void main(String[] args) {
       Student.say();//类名.方法名
}

由于static修饰表示属于类,因此如果想访问类的方法或者变量,则可以直接通过类名.方法名()/类名.变量名进行访问

所谓的动态和静态的区别:对于一个类来说,如果没有被static所修饰的成员变量或者成员方法,那么每实例一个新的对象(new),这些非static修饰的都属于对象。

public class Demo03 {
   public static void main(String[] args) {
       //Demo03.add(1,2);alt+enter
       //实际参数和形式参数的类型要对应!
       int add = Demo03.add(1, 2);
       System.out.println(add);
  }
?
   public static int add(int a,int b){
       return a+b;
  }
}
//值传递
public class Demo04 {
   public static void main(String[] args) {
       int a=1;
       System.out.println(a);//1
       Demo04.change(a);
       System.out.println(a);//1
?
  }
   //返回值为空
   public static void change(int a){
       a=10;
  }
}

值传递只是传递值,那个值的物理地址没被传过去,形参改变的是另一个物理地址的值

对象的创建分析

类和对象的关系

1.类是一种抽象的数据类型,它是对某-类事物整体描述定义,但是并不能代表某-个具体的事物. 动物、植物、手机、电脑.... ◆Person类、Pet类、 Car类等, 这些类都是用来描述/定义某一类具体的事物应该具备的特 点和行为 2.对象是抽象概念的具体实例 ◆张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例。 ◆能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念.

创建对象

◆使用new关键字创建对象 ◆使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用

//学生类
public class Student {
   //属性:字段
   String name;
   int age;
?
   //方法
   public void study(){
       System.out.println(this.name+"在学习");
  }
}
------------------------------------------------
   //一个项目应该只存一个main方法
public class Application {
?
   public static void main(String[] args) {
?
       //类:抽象的,需要实例化
       //类实例化后会返回一个自己的对象!
       //student对象就是一个Student类的具体实例;
       Student xiaoming = new Student();
       Student xiaohong= new Student();
?
       xiaoming.name="小明";
       xiaoming.age=3;
?
       System.out.println(xiaoming.name);
       System.out.println(xiaoming.age);
  }
}

构造器

类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下俩个特点: 1.必须和类的名字相同

2.必须没有返回类型,也不能写void 构造器必须要掌握(自动生成构造器快捷键:alt+insert)

public class Person {
   //一个类即使什么都不写,他也会存在一个方法
   //显示的定义构造器
?
   String name;
?
   //实例化初始值
   //1.使用new关键字,本质是在调用构造器
   //2.用来初始化值
   public Person(){
       // this.name="仙女";
  }
?
   //有参构造:一旦定义了有参构造,无参就必须显示定义(重载)
   public Person(String name){
       this.name=name;
  }
}
--------------------------------------------------
public class Application {
?
   public static void main(String[] args) {
       //new实例化了一个对象
       Person person = new Person("仙女");
       System.out.println(person.name);
  }
}

构造器:

  1. 和类名相同

  2. 没有返回值

作用:

1.new 本质在调用构造方法 2.初始化对象的值

注意点:

  1. 定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造.

简单小结类与对象

  1. 类与对象 类是一个模板:抽象,对象是一个具体的实例

  2. 方法 定义、调用!

  3. 对象的引用 引用类型:基本类型(8) 对象是通过引用来操作的:栈--->堆

    Object  obj=new Object();
    //obj:对象的引用
    //new Object():对象
    //Object:类
  4. 属性:字段Field 成员变量 默认初始化: 数字:0,0.0

    char : u000

    booLean:falsel

    引用: null 修饰符 属性类型 属性名=属性值!

  5. 对象的创建和使用 -必须使用new关键字创造对象,构造器

    Person xiannv = new Person();

    -对象的属性xiannv.name -对象的方法xiannv.sleep()

  6. 类: 静态的属性 属性

    动态的行为 方法