zoukankan      html  css  js  c++  java
  • [Java初探08]__简单学习Java类和对象

    • 前言
      在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使用.

    那么,这里为什么要先将类,而不是像之前一样先讲对象呢,那是因为在前面的学习中,我们知道了,对象是类的一个实例.类是封装兑现属性和行为的载体,所以对象的一切都在类之中,对象的属性,行为的调用都得先通过实例才能使用,它们是一个包含关系,对象是依赖于类的.

    • 类在Java中的创建

    我们都知道,在我们新建一个Java文件的时候,大多是这样的.

    2019-4-8-01.png

    这充分说明了在Java语言中,一切都是基于类与对象建立的.

    类在Java语言中式通过class关键字定义的.而且还可以使用各种修饰符对其权限进行限定,关于修饰符,在前面也有讲到过.

    class cat{
        
    }
    

    • 类的成员变量与成员方法

    我们通过观察类文件的结构可以发现是这样的.

    2019-4-8-02.png

    我们可以发现:

    • 在一个Java文件中不仅是可以声明多个类的,还可以在类的内部定义一个类,这可以叫做类的嵌套使用了,这种机制应该就是Java中的内部类的特性.我们在后面在做详细学习.

    • 我们还可以在Structure视窗里发现,类的结构是由方法体和成员变量组成的.

    • 成员变量

    我们已经了解到类封装对象属性和行为的载体,而对象的属性是通过成员变量定义的,行为是通过方法创建的.一个类的成员变量就是封装对象的某种属性,成员变量也可以通过修饰符限定其使用范围,因此有静态变量,成员变量,局部变量,常量等区分,关于它们之间的联系与区别,这一点在前面的Java基础中应该有讲过.

    • 成员方法

    我们可以通过实例化一个对象,然后调用其属性和方法.而在通常情况下,一个对象的属性是不会在封装类就被初始化的,只会被定义,应为对象的属性通常都是可变的,我们只能通过实例化对象,来确定一个具体对象的具体属性.

    那么我们应该如何来调用到对象的属性和设置对象的属性呢.这时我们就会理所当然的想到,当然时使用方法了嘛.是的我们只需要在类中封装获取和设置对象属性的方法就可以了.

    而这类获取和设置成员变量的方法就叫做成员方法.(因为其都具有很明显的特征和作用)

    // 成员方法,获取成员变量
        public boolean getindepentThing(){
            return this.independentThing;
        }
        // 成员方法,设置成员变量
        public void setindepentThing(boolean independentthing){
            this.independentThing = independentthing;
        }
    
    • 类的构造方法
      构造方法是类中的另以特殊的方法体,构造方法是一个与类名相同的方法,对象的创建就是通过构造方法来完成的.每当类实例化一个对象时,类都会调用构造方法,所以构造方法其实就是相当与实例化对象时的初始化一样.

      • 构造方法是没有返回值的
      • 构造方法的名称要与本类的名称相同.

    为什么构造方法的名称必须与类名称相同,我们看看对象的实例化:

    animal animal = new animal();
    

    如此,我们大概明白了,之所以构造方法的名称和类名称相同,是为了在对象的实例化的时候,通过new animal(),使构造方法在对象的实例化的同时也运行了,这样才能实现在实例化对象就能够初始化对象的属性的目的.构造方法的存在,解决了对象的初始化问题,使得我们每次实例化的对象都拥有我们想要设定的属性值,之后我们就可以直接调用其属性,而不需要频繁的使用成员方法来设定对象的值.

        /**
         * 构造方法
         */
        public animal(){  // 无参的构造方法.
            this.independentThing= false;
    }
        public animal(boolean independentthing){  // 有参的构造方法
            this.independentThing = independentthing;
    }
    
    • 类中普通的方法

    在之前的学习中我们已经了解了关于方法在Java中的定义,使用返回值类型修饰符+方法名.即可创建一个方法体.而我们常常会使用到的void修饰符是分特殊的,它不需要我们return一个值,void的字面意思就是空,我们治理只需要了解到void修饰的方法体,是不需要返回值的.

    在类和对象的学习中,我们又了解到,类中的方法其实就是对某个对象的行为的一种封装,所以类中最常见的方法,其实就是这种对行为封装的方法,也可以说是我们自定义的方法,因为这种方法的所有内容都是我们自定义的.这类方法其实才是最普遍存在于类中的.

    void eat(){
            System.out.println("动物的吃行为");
        }
    
    • 类的主方法
      我们在前面的学习中,了解到一个类只能有一个主方法,而这个主方法是用来让Java编译器识别,编译运行的.为什么要这样设计,我们其实已经可以分析的出来了,因为Java语言是基于类和对象的基础上的一门语言,其基本的组成单位其实可以说就是众多的类,然后由众多的类组成的类库组成了Java的标准类库,我们都是基于Java标准类库来编程的,如果不定义一个主方法用来编译运行,那么各种类中的不计其数的方法该如何来标记,如何知道该编译运行哪个方法,调用哪个类.所以类的主方法的存在是必然的一个演变过程.

    类的主方法是类的入口点,它定义了程序从何处开始,主方法提供程序流向的控制,Java编译器通过主方法来执行程序.

    主方法的语法是固定的:

    public static void main(String[] args){
    // 方法体
    }
    

    我们从主方法的定义可以看到其具有的一些特性:

    • 主方法是一个静态的方法,所以如果要直接在主方法中调用其他方法,则调用的方法也必须是静态的才行.

    • 主方法是没有返回值的.

    • 主方法的形式参数是数组,其中arg[0]~arg[n]表示程序的第一个参数到第n个参数.可以使用args.lenght获取到这个值.


    • 对象

    我们现在已经非常了解了,对象就是由类抽象出来的一个实例.比如人类中有一个叫小舍,性别为男的人.那么这个人就是从人类中实例化出来的一个对象.

    • 对象的创建

      其实我们在之前的学习中已经或多或少的有使用到对象,我们是这样创建一个对象的:

    animal animal = new animal();
    animal animal12 = new animal(true);
    
    

    在字符串的学习中,我们使用过String类的构造方法,创建一个初始化对象.

            String astr3 = new String(a,0,2);
            String astr4 = new String(b);
            String astr5 = new String(b,0,2);
    

    在Java语言中我们通过new操作符来创建对象.

    2019-4-8-01.gif

    这里其实有一点小疏忽,一般情况下,类的成员变量一般不会设置成公开的,需要使用private修饰符将其修饰为私有的,然后通过成员方法来访问和设置它的值.

    private boolean independentThing;
    
     System.out.println(animal.getindepentThing());
     animal1.setindepentThing(false);
    

    我们实例化了对象之后,我们就可以通过对象来调用其属性和行为(就是方法)了

            animal.eat();
            System.out.println(animal.independentThing);
    
    
    • 对象的引用

    在Java语言中,尽管一切都可以看作对象,但实际上的操作标识符是一个引用,那么引用在Java中是怎么体现的.

    // 类名 对象引用名称,
    animal animal;
    

    实际上,引用并不一定要有一个对象相关联,引用和对象相关连的语法是:

    animal animal = new animal();
    

    new就是创建对象的操作符,整个语句相当于创建一个引用animal类的对象,这就是实例化对象的过程.

    • 对象的比较
      我们知道在程序的实际中经常会使用到比较判断,而我们在前面的基础数据类型和运算符的学习中知道了,符是用来比较两个数据的.那么我们现在又知道了对象在Java中的地位是举足轻重的,并且会时长用到,那么对象的比较是否也可以使用符来比较呢.
            System.out.println("字符串是否和abc相等:"+mstr.equals("abc"));
            System.out.println("字符串是否和abc相等:"+(mstr=="abc"));
    

    显然,是不行的,因为我们在前面字符串的比较时就简单的了解到,号是不能用来比较两个String类型的值的,需要通过String类的equals()方法比较.对象的比较是通过其相应类的equals()方法进行比较的.而不能使用符比较,这是因为==比较的是两者引用的地址是否相等.而equals方法比较的才是比较两个对象引用的内容是否相等.

    • 对象的销毁

    每个对象都有声明周期,当生命周期结束的时候,对象就会被销毁,其分配的内存就会被回收,在其他一些语言中,对象的内存回收可能会需要手动销毁回收,但在Java语言中,拥有一整套完整的垃圾回收机制,可以根据对象的生命周期来回收其内存,Java的垃圾回收机制也不单单运用在对象上,它对于Java的内存回收有一整个控制回收机制.我们在这里就简单的了解一下就行.

    • 源代码
    package day_4_8;
    
    /**
     * @outhor xiaoshe
     * @date 2019/4/8  - @time 17:22
     *类
     * 在Java语言中,类是使用class关键字来定义的
     * 类可以有不同种,通过类前面的关键字来修饰
     * 也就是Java修饰符,一般情况下,修饰符限定了类的使用范围.
     * class后接类名,class是定义类的关键字,具体的类名需要自定义命名,
     * 命名规则是需要遵循java标识符的规则的.
     */
    public class sty_class {
        // 通过主类里的主方法来调用不同类的不同方法.因为只有主方法才会被编译运行
        // 所以想要使用任何类,或类的方法的使用.都需要通过主方法调用才能实现.
        public static void main(String[] args) {
            // 想要调用某个类的某个方法,就需要实例化一个这个类的对象,通过实例化对象调用方法.
            // 无参的构造方法构建对象.
            animal animal = new animal();
            animal.eat();
            System.out.println(animal.getindepentThing());
            //有参的构造方法,构建对象
            animal animal1 = new animal(true);
            animal1.setindepentThing(false);
            System.out.println(animal1.getindepentThing());
            System.out.println(args.length);
        }
        public static class book{
    
        }
    }
    /**
     * 我们在同一个java文件里,可以声明多个不同的类.
     * 声明animal动物类.
     * 通过类来封装对象的属性和行为.
     */
    class animal{
        // 在哦Java语言中,通过类的成员变量表示对象的属性.
        private boolean independentThing;
    
        // 成员方法,获取成员变量
        public boolean getindepentThing(){
            return this.independentThing;
        }
        // 成员方法,设置成员变量
        public void setindepentThing(boolean independentthing){
            this.independentThing = independentthing;
        }
        /**
         * 构造方法
         */
        public animal(){  // 无参的构造方法.
            this.independentThing= false;
        }
        public animal(boolean independentthing){  // 有参的构造方法
            this.independentThing = independentthing;
        }
        // 在Java中通过构建方法的形式,来表示对象的行为.
        void eat(){
            System.out.println("动物的吃行为");
        }
    }
    

    • 后记

    类和对象可以说是Java语言的基础之基础,重中之重,理解清楚面向对象思想和学明白Java类和对象的机制是学习Java语言的必不可缺的阶段,在理解它们的基础上学习Java能够达到事半功倍的地步.因为可以说Java语言的一切几乎都是建立在类和对象上的,当你把类和对象理解透彻了,在其基础上学习其它知识怎会不更加简易呢.?


    更新时间:
    2019-4-8
    21:04

  • 相关阅读:
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    发生dev_queue_xmit的时候,全部都是从ip_finish_output中来的吗
    网络控制API 路由表 arp表 包括tcp的这些参数都是从哪里设置
    dev_queue_xmit 发生了什么?skb还会在哪里缓存
    内核blackhole
    网卡多ip 再看arp; arp队列也会缓存skb
    tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
    socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)
    貌似要看看时钟了
    读写JSON作配置文件
  • 原文地址:https://www.cnblogs.com/gemuxiaoshe/p/10673425.html
Copyright © 2011-2022 走看看