目录
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<String> list = new ArrayList<>();
//或者
List<String> list = new ArrayList<>();
其中,<>中放的是泛型,即参数化类型。
要写泛型的原因在于ArrayList中是可以放各种类型的,为了让编译器能够判断程序员放入ArrayList中的数据类型是否正确,就需要使用泛型,来作为编译器的判断标准
注意,要在ArrayList中放int类型数据时,泛型要写Integer
即:ArrayList<Integer> list = new ArrayList<>();
ArrayList的具体使用:
ArrayList<String> 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)之前也提到过,面向对象与面向过程最大的区别在于,前者比起后者,更注重一种现实性,即更接近人类的思维,我们需要思考到底什么方法应该写在什么类里面,什么类应该由什么类来管理,这些都更贴近现实。
网友评论