Java 语法学习笔记(二)
文章目录
参考教程
介绍
Java 许多语法跟 C/C++,比较相似。本人学习过 C/C++/Python , 因此仅记录 Java 语法特有的部分。
Java 内置包装类
Object 类
Object 是 Java 类库中的一个特殊类,也是所有类的父类。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类
Object 类包含 clone
、equals
、notify
、hashCode
等方法
Number 类
Java 语言为每一个内置数据类型(原语类型)提供了对应的包装类。
所有的包装类(JDK 类)(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类
Java 原语类型(内置数据类型)与响应的 JDK 类之间的转换分别叫做装箱和拆箱,装箱和拆箱可隐式的完成(自动装箱和自动拆箱)
- 存在
toString
方法 - 存在
toHexString
、toOctalString
、toBinaryString
等静态方法
System 类
System 类的成员变量
System 类有 3 个静态成员变量,分别是 PrintStream out、InputStream in 和 PrintStream err
-
PrintStream out
标准输出流。此流已打开并准备接收输出数据
-
InputStream in
标准输入流。此流已打开并准备提供输入数据
-
PrintStream err
标准的错误输出流
System 类的成员方法
-
arraycopy() 方法
该方法的作用是数组复制,即从指定源数组中复制一个数组
-
currentTimeMillis() 方法
该方法的作用是返回当前的计算机时间
-
exit() 方法
该方法的作用是终止当前正在运行的 Java 虚拟机
-
gc() 方法
该方法的作用是请求系统进行垃圾回收
-
getProperty() 方法
该方法的作用是获得系统中属性名为 key 的属性对应的值
Math 类
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
Character 类 && String 类
Character 类
Character 类用于对单个字符进行操作。
Character 类在对象中包装一个基本类型 char 的值
String 类
String 常用于创建字符串常量,经常修改 String 对象字符串效率较低
-
连接字符串
concat()
方法+
运算符
-
创建格式化字符串
Sring 类静态方法
format()
,用法类似printf()
StringBuffer 和 StringBuilder 类
- 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
- StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)
- StringBuilder 相较于 StringBuffer 有速度优势
Java 集合
接口、实现、算法的关系
- 接口集合抽象的数据类型
- 实现(类)是集合接口的具体实现,如
ArrayList
、LinkedList
- 算法是实现集合接口的对象里的方法执行的一些有用的计算,这些算法被称为多态
Collection 接口
- 最基本的集合接口
- Collections 类提供了可以实现集合元素的排序、填充和复制等操作的静态方法
数组
同一类型的数据集合,大小固定
List
- 定义:有序集合,也称为序列
- 特点:能够精准的控制每个元素插入的位置,能够通过索引访问其中的元素
- List 有基于数组实现的 ArrayList 类和基于链表实现的 LinkedList 类
Set
- 定义:数学上的集合原型。不包含重复的元素
- 特点:Set 检索效率低下,删除和插入效率高
- Set 有基于哈希算法实现的 HashSet 类和基于 SortedSet 接口实现的 TreeSet 类,TreeSet 只能对实现了 Comparable 接口的类对象进行排序
Map
- 一种键-值对集合,Map 不能包含重复的键
- Map 接口主要有 HashMap 类和 TreeMap 类两种实现;HashMap 类按照哈希算法来存取对象,而 TreeMap 类可以对对象进行排序
Java 泛型
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数
-
泛型集合
-
泛型类
-
泛型方法
是否拥有泛型方法,与其所在的类是不是泛型没有关系
一般来说编写 Java 泛型方法,其返回值类型至少有一个参数类型应该是泛型,而且类型应该是一致的,如果只有返回值类型或参数类型之一使用了泛型,那么这个泛型方法的使用就被限制了
泛型高级用法
-
限制泛型可用类型
class 类名称<T extends anyClass>
-
使用泛型限制后,泛型类的类型必须实现或继承 anyClass 这个接口或类
-
当没有使用 extends 关键字限制泛型类型时,其实是默认使用 Object 类作为泛型类型
-
-
使用类型通配符
类型通配符作用是在创建一个泛型类对象时限制这个泛型类的类型必须实现或继承某个接口或类
用法:
泛型类名称<? extends List>a=null;