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

目录

1.本文主要内容简介

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

3.“类”的细节讲解

4.总结

0.前言

  • 本文重点在于讲解Java中类的相关知识

  • 如果想要了解一些基础知识的,可以去看前面的文章
    《[Java]开发安卓,你得掌握的Java知识1》

  • 由于最终目的是要开发安卓app,
    因此这里使用的IDE是AS(Android Studio)
    (不会使用的可以参考下面这篇文章)
    《[Java]开发安卓,你得掌握的Java知识2》


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——“类” 其之一)