Java入门(一)---面向对象

作者: kakarotto | 来源:发表于2018-07-22 01:38 被阅读3628次
    二狗子.jpeg

    面向对象:

    关注现实存在的事物的各个方面的信息,从对象的角度出发,根据事物的特征进行程序设计。

    类,是抽象的概念,可以理解为一个模型,用来确定对象将会拥有的特征(属性)和行为(方法)
    对象,是类的实例表现形式,一个实体。

    • 类的属性:对象具有的各种静态特征 (对象有什么)
    • 类的方法:对象具有的各种动态行为 (对象能做什么)

    实例化

    定义一个Dog类,有两个属性nameage,还有两个方法,run()eat()
    新建文件Dog.java

    public class Dog {
        //成员属性:name age
        String name;
        int age;
        //成员方法: run  eat
        public void run(){
            System.out.println("跑");
        }
        public void eat(){
            System.out.println("吃");
        }
    }
    

    接着,再定义一个用来测试的类, TestDog.java

    1 public class TestDog {
    2    public static void main(String[] args){
    3        Dog dog = new Dog();
    4        dog.name = "灰灰";
    5        dog.age = 2;
    6        System.out.println(dog.name);
    7        System.out.println(dog.age);
    8        dog.eat();
    9        dog.run();
        }
    }
    

    下边来看下TestDog.java做了些什么:
    第一行第二行的基础部分这里不再赘述,直接看第三行,实例化对象 Dog dog = new Dog();
    实例化对象的过程可以分为两部分:

    • 声明对象 Dog dog :在内存的栈空间开辟一块空间, 此时对象是空的, 无法使用
    • 实例化对象 new Dog() : 在内存的堆空间开辟一块空间,完成具体对象初始化操作
    image.png
    通过赋值操作,把堆空间的内存地址存放到了dog中:
    Dog dog = new Dog();
    关于对象的实例化操作,是通过new + 构造方法的形式来完成的。

    构造方法

    构造方法也称为构造函数、构造器:
    1.构造方法与类同名且没有返回值
    2.只能在对象实例化的时候调用(配合 new调用)
    3.当没有指定构造方法时,系统会自动添加无参的构造方法
    4.当指定了构造方法,无论有参数还是无参数的构造方法,都不会自动添加无参数的构造方法
    5.一个类中可以有多个构造方法,---构造方法重载,java会根据参数去自动选择。

    上边的Dog.java没有定义构造方法,在调用时系统自动帮我们添加无参数的构造方法,下边我们添加上有参数的构造方法:

    public class Dog {
        String name;
        int age;
        
        //带参数的构造方法
        public Dog(String name, int age){
    
        }
    
        public void run(){
            System.out.println("跑");
        }
        public void eat(){
            System.out.println("吃");
        }
    }
    

    当我们使用带参数的构造函数来进行初始化的时候,为了避免产生赋值错误的情况,可以使用this关键字

    this关键字

    this代表当前对象的默认引用,上述代码,dog就是当前对象
    更改Dog.java

    public class Dog {
        String name;
        int age;
    
        //带参数的构造方法
        public Dog(String name, int age){
            //把传入的 name 赋值给局部变量 name
            this.name = name;
            //把传入的 age 赋值给局部变量 age
            this.age = age;
        }
    
        public void run(){
            //调用成员方法eat,(这里只是演示this的使用 不关心逻辑)
            this.eat();
            System.out.println("跑");
        }
        public void eat(){
            //也可以不用this 直接调用成员方法run
            run();
            System.out.println("吃");
        }
    }
    

    补充知识

    我们在类中定义变量后,其实变量是有初始值的,代码说明:
    新建Demo.javaTestDemo.java

    public class Demo {
        String name;
        int age;
        double d;
        boolean n;
    }
    
    public class TestDemo {
        public static void main(String[] args){
            Demo de = new Demo();
            System.out.println(de.name);
            System.out.println(de.age);
            System.out.println(de.d);
            System.out.println(de.n);
        }
    }
    运行结果:
    null
    0
    0.0
    false
    

    上边Demo.java中定义了四个不同类型的变量,直接在TestDemo.java中调用并打印,可看到变量的默认值。

    下图展示了变量定以后的初始值:


    image.png

    相关文章

      网友评论

        本文标题:Java入门(一)---面向对象

        本文链接:https://www.haomeiwen.com/subject/hpckmftx.html