java基础学习笔记——day08(面向对象,构造器,this、static)

java基础学习笔记——day09

第三章——面向对象

1. 面向对象和面向过程

这里用人开车的例子说明:

  • 面向过程: 人开车,人是一个对象,车是一个对象,我们只需要知道,人有开车这个功能,车有被开这个功能,我们不需要知道人是怎样开车的,车是怎样组成的或者被开的,只要知道人开车能到目的地就行

  • **面向过程:**人开车,人是怎样开车的我们要知道怎样开车的(考驾照,买车,上车,点火,启动,踩离合,踩油门……),里面我们每一步都要划分成详细的一个一个过程,这就是面向过程

  • 面向过程和面向对象的区别:

    1. 针对小问题,面向过程是解决办法。但是面对一些复杂问题时,面向过程显然力不从心。面向过程是微 观上解决问题的方式,管得太多了。
    2. 面向对象是解决问题的另外一种方式,针对一些简单问题有点大材小用,针对复杂问题就变得极其轻 松。面向对象是从宏观上把控事务的整体走向。管的太少了。
    3. 面向对象和面向过程不是相互独立的而是相互依存的。通过面向对象去从整体上思考问题的大致方向, 但是后实际解决的过程中还是通过面向过程去执行的。
  • 编码的过程中而言,存在一个需求,先从宏观上整体看待需求,再从微观上去实际编码解决问题。

2. 对象

2.1 什么是对象

  • 在java中万事万物都是对象(人,电脑,杯子,鼠标)

    • 人能吃饭,跑步;电脑能完游戏,敲代码;杯子能装水;鼠标能帮助我们控制电脑

    • 对象对应了相应的功能,我们不需要知道这些功能是怎样来的,怎样实现的我们只需要知道他们有这个功能,并且能拿来用就行了,这就是对象

  • 面向对象大好处和魅力也在于此,就是减低了使用者的使用复杂度,提高了被使用者的安全 度。

2.2 类和对象的关系

  • **类:**类就是将具有相同特征的许多事物归为一种类别

  • **对象:**对象就越是类具体事务的体现

  • 比如,鸟类就是一个类,里面的对象有啄木鸟(啄木),老鹰(抓小鸡),喜鹊(报喜)

在java中的类和对象:

  • 类:class修饰的 一个类可以产生很多个对象。
  • 对象:基于类的一个实例化的表现形式
  1. 类的产生是依赖于对象的,类是将对象中相同特征或者是行为抽取出来归为一类
  2. 对象的产生是依赖于类的,如果没有类是无法产生该类的对象的,该类的实例
  3. 类是对于对象的抽像(抽取像的部分),对象是类的具象化的表现形式。

3. 如何编写类和对象

3.1 编写类

  • 类是为了产生对象的,而对象存在的本质是为了能够帮助我们去实现一个具体的业务。对象对于使用者 而言,能够知道的有
    1. 外在的表现形式:姓名、性别、身高、体重、籍贯 : 通过成员变量来实现的
    2. 内在的功能:能力:能够做什么:吃饭、睡觉、打豆豆、买烟、开车: 通过方法实现的
    3. 成员变量也好、方法也罢都是非静态修饰的
public class Person{
    String name;//外在属性:名字、性别、年龄
    char gender;
    int age;
    public void eat(){ //人能吃饭
        System.out.println("吃饭");
    }
    public void sleep(){//人会睡觉
          System.out.println("睡觉");
    }
}

3.2 编写对象

  • java中通过new关键词来产生当前类的一个具体的实例、对象。

  • 语法:

    类名  变量名 = new  类名();
public class PersonText{
    public static void main(String[] args){
       Person p = new Person();
        p.eat();
        p.sleep();
        System.out.println(p.name);
    }
}
  • 输出结果:
吃饭
睡觉
null
  1. 类是一个引用类型,我们定义的所有的类都是一个自定义的数据类型,这些数据类型都是引用类 型。
  2. 凡是引用类型在创建对象时必须通过使用 new 关键词来创建。
  • new关键字的作用:
    1. 开辟空间:在堆内存中开辟一个空间
    2. 赋初始值:给类中的成员变量赋初始值
    3. 指向引用:在新创建的变量中存储一个开辟的堆内存的地址

4. 构造器

4.1 什么是构造器

  • 构造器就是java中用来产生对象的特殊方法 ,这个特殊方法就是类中的一个构造器

4.2 构造器的声明

4.2.1 无参的构造器
public class 类名{
    //创建一个无参构造器
    public 类名(){
        构造器中的执行语句;
    }
}
  • 构造器的方法名要和类名一致
  • 构造器方法没有返回值

注意事项:

  • 在一个类中,如果没有创建任何一个构造器,呢么java会自动填充一个空参数的构造器(在代码中看不见)
4.2.2 带参数的构造器
public class 类名{
    String name;
    int age;
    //创建一个带参构造器
    public 类名(String yname){
        name = yname;//构造器中的执行语句;
    }
}

测试:

class Person{
    String name;
    int age;
    //创建一个带参构造器
    public Person(String yname){
        name = yname;//构造器中的执行语句;
    }
}
public class PersonText{
    public static void main(String[] args){
       Person p1 = new Person("小王");
       Person p2 = new Person("小李");
       Person p3 = new Person("小刘");
        System.out.println(p1.name);
        System.out.println(p2.name);
        System.out.println(p3.name);
    }
}

结果:

小王
小李
小刘
  • 注意
    • 如果一个类中存在带参构造器,那么无参构造器如果不显示编写,则不存在。如果显示编写,则还 有。
    • 构造器也存在重载。

5. this 关键字

5.1 什么是this

  • 代表的是当前对象的。谁在调用谁是当前对象。
  • 大多数情况下this.都是可以省略的
  • 当出现了同名的变量时,this.是不可以省略的。此时this.的作用是用来区分同名变量。

5.2 this的使用

  • this关键词,一共有两种用法,称之为 this.this()
  • this. :当出现了同名的变量时,this.是不可以省略的。此时this.的作用是用来区分同名变量
 class Person{
    String name;
    int age;
    //创建一个无参构造器
    pubilic Person(){
        this.eat();//用this.  调用该类的eat()方法
    }
    //创建一个带参构造器
    public Person(String name,int age){
        this.name = name;// this. 用来区分同名变量
        this.age=age;
        //如果不适用this. 那么java就无法区分两个同名变量				name和age,就会报错
    }
    public void eat(){
        System.out.println("吃饭了");
    }
}
public class PersonText{
    public static void main(String[] args){
      //调用无参构造器
        Person p1 = new Person(); 
        System.out.println(p1.name);
      //调用有参构造器  
        Person p2 = new Person("小李",18); 
        System.out.println(p2.name);
        System.out.println(p2.age);
    }
}

结果:

吃饭了
null
小李 
18
  • this() :用来实现构造器之间的互相调用。
class Person{
    String name;
    int age;
    //创建一个无参构造器
    pubilic Person(){
        this("小李"18);//通过this() 调用了带参构造器
    }
    //创建一个带参构造器
    public Person(String name,int age){
        this.name = name;
        this.age=age;
    }
    public void eat(){
        System.out.println("吃饭了");
    }
}
  • this() 作用
    • 实现了构造器之间的相互调用
    • 其他方法中不能使用this(),只能在构造器中使用
    • 必须保证this()在构造器的第一行

6. static 关键字

6.1 含义

  • static的意思是: 静态的 共享的
  • 通过static修饰的方法、类、就是静态的方法、类

6.2 static的使用

  • static中使用static修饰的
public class Person{
    static int num=10;
    public static void main(String[] args){
        System.out.println(num); //直接访问
    }
}
  • static中使用非static修饰的
public class Person{
    int num=10;
    public static void main(String[] args){
        Person p =new Person();
        System.out.println(p.num); 
        //通过创建对象访问
    }
}
  • 非static中使用static修饰的
public class Person{
    static int num=10;
    public static void main(String[] args){
        Person p =new Person();
        p.method();
    }
    public void method(){
         System.out.println(num); //直接变量名和方法名访问
    }
}
  • 在其他类中访问静态内容可以直接通过类名.方法名/变量名直接访问
  • 静态内容在其他类中访问时可以通过类名直接 . ,也可以通过对象 . (不推荐使用)
public class Test{
    public static void main(String[] args){
        System.out.println(Person.num);
    }
}

6.3 注意事项

  • static修饰的内容是隶属于类的,类被加载,静态内容就被加载到内存中了。
  • 非static修饰的内容是隶属于对象的,对象存在,非static的内容才能被调用。
  • 类信息是先于对象存在的。创建对象时类一定被加载到内存中了,但是如果类被加载到内存中,对 象不一定存在。

你可能感兴趣的:(Java学习,java小白)