类与对象概述
Java的设计体现了面向对象的思想,一切皆为对象(除了基本数据类型),面向对象包括三个特性:
- 封装
- 继承
- 多态
类就像是一个模板,而对象就是根据这个“模板”制作出的产品。
类包括4种访问控制权限,如下:
关键字 | 说明 |
---|---|
private | 仅对本类可见 |
default(默认省略) | 对本包可见 |
protected | 对本包和所有子类可见 |
public | 对所有类可见 |
对象和对象变量
1 | public static void main(String[] args) { |
其中,对象变量获取的是对象的引用。
static关键字
首先要理解“静态域”的概念,静态域是伴随于类存在的,和对象无关,也就是说,当已经存在一个类时,无需声明其对象,就已经拥有了静态域内的所有资源。并且,每一个类有且仅有一个静态域,且静态域是封闭的,既静态域中的方法,不能调用非静态域的属性。
静态变量和静态常量(类数据)
静态变量不常用用,但静态常量却用的比较多,比如:Math.PI,一般静态常量用final关键字修饰,为了保证其不被修改
使用类数据的两种方法:
- 通过类去定位数据:
Math.PI
(推荐) - 通过对象去定位数据:
Math math=new Math();math.PI
静态方法(类方法)
静态方法,是静态域中的内容,不能调用非静态域中的属性,但可以访问自身静态域中的属性
在下面两种情况下,可能使用静态方法:
- 一个方法不需要访问对象的状态
- 一个方法只需要访问其静态域
通过this指针了解static
static方法就是没有this的方法,而普通的方法是由对象调用的,所以有 this
抽象类
抽象类是普通类和接口的折中,拥有普通类和接口两者的特性!!!!
抽象类可以包括抽象方法和非抽象方法
- 普通类中的方法就是非抽象方法,这种方法不强制要求其子类去实现什么,继承后即可使用。
- 而接口中的方法则为抽象方法,必须由实现接口的类去完成具体功能的实现。
一个类只能继承一个抽象类,而一个类却可以实现多个接口
- 普通类的单继承的
- 而接口是多实现的
从上述特点可以看出:抽象类是普通类和接口的折中
从另一个角度理解:抽象类要求其子类必须实现某种接口
Java中常用的类
Date
- Date类采用的是UTC时间
- 打印出的格式为:
Tue Aug 20 15:25:05 CST 2019
- 同时包含了年月日时分秒
LocalDate
采用的是当地的标准时间,例如在中国,采用的是公历
打印出来的格式为:
2019-08-20
只包含年月日
创建对象不是使用构造器,而使用静态的.of()方法
1
2
3
4public static void main(String[] args) {
LocalDate a = LocalDate.of(2011, 8, 20);
System.out.println(a.getYear());
}LocalDate可以自定义日期
还可以计算多少天之后的日期,可用于会员日期的计算
1
2
3
4
5public static void main(String[] args) {
LocalDate a = LocalDate.of(2019, 8, 20);
LocalDate b=a.plusDays(1000);
System.out.println(b);
}
LocalTime和LocalDateTime
基本使用方法可以参考LocalDate
Math
Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
Random
可以进行随机生成,其实是伪随机(以时间为种子)
大数值类
当基本的整数和浮点数的精度或大小范围不够用时,可以使用BigInteger和BigDecimal(可以处理任意长度数值)
- 声明变量比较特殊
- 不能使用熟悉的运算符去运算此类
1 | public static void main(String[] args) { |
包装类
- 包装类和基本数据类型之间可以自动装箱和拆箱
- 用包装类做相等比较的时候,要使用equals,原因是“==”比较的是包装类声明的对象的引用
- 包装类对象值不能改变,并且包装类都用final修饰,不能被继承
8中基本数据类型都有对应的包装类,这里用int的包装类,Integer为例:
Integer.parseInt(“1024”);
Integer.valueOf(“1024”).intValue();
这两个返回值都为int型
- parseInt():是Integer中的静态方法,将数据转换为int型(可以由函数名称看出)
- Integer.valueOf():可以将数据转换为Integer类型
- intValue是Integer对象的内置方法,用与将Integer类型转换为int型(但是其实由自动装箱和拆箱)