美文网首页
[Java]开发安卓,你得掌握的Java知识3——“类” 其之一

[Java]开发安卓,你得掌握的Java知识3——“类” 其之一

作者: 入梦瞌睡 | 来源:发表于2019-08-07 00:46 被阅读0次

    目录

    1.本文主要内容简介

    2.“类”的基础知识讲解

    3.“类”的细节讲解

    4.总结

    0.前言

    1.本文主要内容

    • Java中类的相关基础知识

    • 对应知识的相关细节

    2.“类”的基础知识讲解

    在c语言中,对于复合型的数据类型,我们一般会使用struct

    • 而在Java中,我们要定义一个复合型的数据,一般会用class
      就是下面所说的“类”

    什么是“类”

    • “类”就是描述具有相同属性的一类事物的一种概念,是抽象的,
      “类”不是实际存在的东西,

    就像我们每个人都属于人类,
    每个人都是"人类"这个抽象概念的的一个实例
    但是“人类”这个概念并不是实际存在的,我们每个人是实际存在的

    跟“类”有比较密切联系的概念,是“对象”

    什么是“对象”

    • 对象是具体的实际的存在,是某一类的实例化(即使类的实际例子)

    在Java中,类用class表示,而对象则一般是通过new 语句得到的

    如:

    class Person{
      public String name;
    }
    public static void main(String[] args){
       Person p = new Person();
    }
    
    • 以上代码中,Person就是一种类,
      p就是Person类的一个实例,是一个对象

    什么是“属性”

    • 属性就是同一类实例都拥有的共同的性质

    同一类的不同实例都有相同的属性,但是每个属性的值不尽相同

    什么是“方法”

    • 方法就是同一类实例都拥有的函数

    • “在类中寻找(或是自定义)对应的方法以解决问题”
      这是Java的基本思想

    3.“类”的细节讲解

    3.1类的基本定义

    上文中提到,类中包含有各种属性和方法,因此,

    • 我们在考虑将某一类事务抽象成“类”时,
      需要考虑他们具有什么相同的属性,以及会做哪些事情
      (将这些会做的事情变成方法)

    具体语法:(此处以Person类为例子)

    class Person{
        String name;//每个人都有名字
        int name;//每个人都有年龄
        
        void sayHello(){
              //每个人都会说你好
              System.out.println("hello!");
         }
    }
    

    3.2类的简单应用

    要使用类的属性、方法,需要先实例化
    即,先把一个抽象的概念,依靠一个实际的载体进行实例化
    就像你必须找一个真正的人,才能帮你,
    而不是说我要找“人类”这个概念来帮我的忙

    public static void main(String[] args){
       Person p = new Person();
       p.name = "小王";
       p.age = 20;
       p.sayHello();
    }
    

    以上代码就是先将Person类实例化,得到一个Person类的对象p
    然后通过这个p,
    我们可以给这个对象赋值,且可以通过这个对象调用非静态方法

    3.3类中的修饰符

    一般类中常见的修饰符有:
    public、protected、private、final
    这些修饰符主要是规定了方法、变量的作用域以及使用权限
    不同的修饰符有不同的作用

    • public:外部、内部都可以调用
    • protected: 内部可以调用,外部(同一个包内)可以调用
    • private: 只能内部调用
    • final: 它修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。

    当然,这些修饰符还跟“继承”有一定的关系,但是本文暂不赘述

    3.4类的一些进阶知识

    3.4.1静态方法

    如果类中的方法使用了static进行修饰,那么该方法就是静态方法,可以通过类名.方法名()的格式调用

    如:

    class Person{
        String name;//每个人都有名字
        int name;//每个人都有年龄
        
        static void sayHello(){
              //每个人都会说你好
              System.out.println("hello!");
         }
    }
    public static void main(String[] args){
       Person.sayHello();
    }
    

    一般数学相关类中,这种用法比较常见,主要就是可以避免创建一个对象却只用一两次方法,浪费空间

    3.4.2匿名对象

    通常情况下,我们对类进行实例化,都会有一个实际的对象(如上面Person类的对象p),但是在一些特殊情况下,可能不需要一个有>名字的实例,就可以使用匿名对象

    void sayYes(Person person){
          //这是一个以Person类为参数的函数
    }
    public static void main(String[] args){
        sayYes(new Person());
    }
    

    上面这个带啊中,new语句使得分配了空间,但是由于没有名字, 故其实也只能用这一次,之后就没法再用了

    • 匿名对象一般用于对象只用一两次的情况
    3.4.3 this

    在类中编写方法时,有时候需要用到该类成员变量
    具体来说就是,如果实例化后:

    • 对象在调用该方法时,需要用到该对象的属性的情况
      此时一般会用this来指示该变量是自己的属性

    如:

    class Person{
        public String name;
        public int lastMoney;
        public Poker poker;
    
        public void initPerson() {
            this.name = name;
            this.poker = new Poker();
            this.poker.number = -1;
            this.poker.suit = -1;
            this.lastMoney = 100;
        }
    
    • 这里为了新手方便,写的是initPerson(),
      实际上这个intiPerson函数中的内容,一般由“构造函数”负责
    3.4.4构造函数

    上面的例子中,我们都没有在类里面写构造函数,
    原因是在正常情况下默认会有一个不带参数的,空的构造函数

    Person p = new Person();
    

    后面的Person()就是一个不带参数的构造函数

    • 有时候我们需要在使用new语句之后就马上为对象赋初值
      (而不是系统默认的值),此时就要编写构造函数
    • 注意:构造函数可以有参,也可以无参,可以是空的,也可以写很多东西,看具体情况
    class Person{
        public String name;
        public int lastMoney;
        public Poker poker;
    
        public Person(String name){
            this.name = name;
            this.poker = new Poker();
            this.poker.number = -1;
            this.poker.suit = -1;
            this.lastMoney = 100;
        }
    
    • 构造函数的名字需要和类名一致

    • 注意:一旦定义了一个自己的构造函数,原来那个默认的无参的空构造函数,就会被当做不存在了(除非重新删光自己定义的)

    • 自定义了构造函数之后,要在实例化时有所体现

    • 可以有多个构造函数(但它们的参数种类、个数不能完全相同)

    public static void main(String[] args){
       Person p = new Person("小王"):
    //此时Person p =new Person();就不能用了,除非再写一个无参数的构造函数
    }
    

    4.总结

    (1)Java使用的是面向对象的思想,与C语言中,“遇到什么问题就马上去写一个函数解决”的思想不同,Java主张先考虑解决这个问题的方法是不是在某个类中已经实现,如果没有,再考虑自己定义。
    (2)Java要多考虑将一系列相似的东西进行抽象,然后写成一个类,这个过程需要考虑这些相似的事物有哪些共同的属性、都能做哪些事情。
    (3)真正着手编写Java应该就会感觉到,有了类之后,能更轻松地做到很多结构体难以做到的事情,类的思想让许多零散的部分连成一个整体,这让问题的解决变得更加简单。

    相关文章

      网友评论

          本文标题:[Java]开发安卓,你得掌握的Java知识3——“类” 其之一

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