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

目录

1.本文主要内容简介

2.“类”的知识补充

3.总结

0.前言

  • 前几篇文章基本上已经把类的大部分知识讲解完毕,
    本文主要负责补上前文的漏洞,
    以及谈一下对面向对象的程序设计思想的理解

  • 若想要了解“类”的主要知识,可以去看前面的文章
    《[Java]开发安卓,你得掌握的Java知识4》
    《[Java]开发安卓,你得掌握的Java知识3》

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

1.本文主要内容简介

  • Java基础知识补充

  • 对应知识的相关细节

  • 实际例子

2.Java基础知识补充

2.1单例设计模式

在上一篇文章中,我们提到了单例设计模式,这里再次补充一些要点

单例设计模式

  • 该设计模式主要用于一些比较高层级的,或者是管理性质的类
    这些类一般会被多个地方调用,且调用的时候要求操作同一个对象

  • 使用该设计模式的类,在整个程序中,都只能有一个对象(类似于全局变量,但是却比全局变量合理一些)

  • 单利设计模式有两种写法:饿汉式与懒汉式


(1)饿汉式写法步骤:

  • 1.构造函数私有化

  • 2.创建一个静态变量

如下面这个管理人的类

public PersonManager{
       //2.创建一个静态变量
       public static final PersonManager manager = new PersonManager();

       private PersonManager(){}//1.构造函数私有化
       
       public void test(){
                //假设有一个函数
        }
}
public static void main(String[] args){
      PersonManager.manager.test();//无需实例化,直接使用
}


(2)懒汉式写法步骤:

  • 1.构造函数私有化

  • 2.创建一个静态变量

  • 3.提供给外部的访问方法

public PersonManager{
       //2.创建一个静态变量
       public static PersonManager manager = null;

       private PersonManager(){}//1.构造函数私有化
       
       public static Player getInstance(){
             if(shared == null){
                 //如果没有创建 就创建一个
                 shared = new Player();
            }
            return shared;
       }
       public void test(){
                //假设有一个函数
        }
}
public static void main(String[] args){
      PersonManager.getInstance().test();//通过函数来给静态变量赋值

      //或者:
     PersonManager manager = PersonManager.getInstance();
      manager.test();

}

两种写法的区别:

  • 饿汉式是直接在创建静态变量时就通过new赋初值
    而懒汉式则是在另写一个函数对静态变量进行赋值

  • 外部调用的时候,饿汉式直接使用静态变量,
    懒汉式则要调用getInstance函数

  • 懒汉式由于要判断是否已经存在,这句话就会导致一个线程不安全的问题,需要synchronize来上锁。
    当然,这个问题在此暂且不深究

以上这些只是单例设计模式的一些比较简单的概念,这种设计模式还会涉及到线程安全等问题,这个在日后的文章中会提及

2.2ArrayList

ArrayList的基础与应用

  • 在Java中,我们除了可以使用C语言中的传统数组以外,还会用到ArrayList

  • ArrayList可以理解为一个不需要在定义的时候就规定好长度,而是在增长时懂得自动分配空间的线性表

ArrayList的定义:
ArrayList list = new ArrayList<>();
//或者
List list = new ArrayList<>();

其中,<>中放的是泛型,即参数化类型

  • 要写泛型的原因在于ArrayList中是可以放各种类型的,为了让编译器能够判断程序员放入ArrayList中的数据类型是否正确,就需要使用泛型,来作为编译器的判断标准

  • 注意,要在ArrayList中放int类型数据时,泛型要写Integer
    即:ArrayList list = new ArrayList<>();

ArrayList的具体使用:
ArrayList list = new ArrayList<>();

String temp = "你好!";
list.add(temp);//这样就可以把"你好"这个字符串加入列表了
System.out.println(list.get(0));//输出"你好"

ArrayList的一些细节:

  • 从编程使用的角度来说,
    ArrayList更加灵活,会自动分配新的空间,
    传统数组则相对比较死板

  • ArrayList获取长度用的是.size(),传统数组用的是.length

  • ArrayList中所谓的“将变量将入列表”,实际上,是分配一定的内存空间,用来存放变量的地址

  • ArrayList中实际上存放的是变量的地址,是一种引用(类似于指针),因此,如果temp的值进行改变,ArrayList中的值也会跟着改变,原因是改变temp的值,实际改变的是所指向内存空间的值

3.总结

(1)基本上这些就是要补充的内容,下一篇文章会开始讲解Java中的其他新的内容。
(2)无论是单例设计模式,还是用static修饰的静态方法、属性,都可以看出面向对象程序设计中,对于封装、结构化的重视,就如同之前文章中说的,面向对象与面向过程不同的就是,后者只需要考虑怎么实现,而前者,则是需要考虑怎么将看似零散的语句、变量,组合成一个整体,用整体的思想来考虑问题。说白了,前者更注重结构的美感。
(3)之前也提到过,面向对象与面向过程最大的区别在于,前者比起后者,更注重一种现实性,即更接近人类的思维,我们需要思考到底什么方法应该写在什么类里面,什么类应该由什么类来管理,这些都更贴近现实。

你可能感兴趣的:([Java]开发安卓,你得掌握的Java知识5——“类” 其之三)