【Java】类与对象

【Java】类与对象


类与对象概述

Java的设计体现了面向对象的思想,一切皆为对象(除了基本数据类型),面向对象包括三个特性:

  • 封装
  • 继承
  • 多态

类就像是一个模板,而对象就是根据这个“模板”制作出的产品。

类包括4种访问控制权限,如下:

关键字 说明
private 仅对本类可见
default(默认省略) 对本包可见
protected 对本包和所有子类可见
public 对所有类可见

对象和对象变量

1
2
3
4
public static void main(String[] args) {
//a是一个对象变量,而new Date()则创建了一个对象
Date a = new Date();
}

其中,对象变量获取的是对象的引用。

static关键字

首先要理解“静态域”的概念,静态域是伴随于类存在的,和对象无关,也就是说,当已经存在一个类时,无需声明其对象,就已经拥有了静态域内的所有资源。并且,每一个类有且仅有一个静态域,且静态域是封闭的,既静态域中的方法,不能调用非静态域的属性。

静态变量和静态常量(类数据)

静态变量不常用用,但静态常量却用的比较多,比如:Math.PI,一般静态常量用final关键字修饰,为了保证其不被修改

使用类数据的两种方法

  1. 通过类去定位数据:Math.PI(推荐)
  2. 通过对象去定位数据:Math math=new Math();math.PI

静态方法(类方法)

静态方法,是静态域中的内容,不能调用非静态域中的属性,但可以访问自身静态域中的属性

在下面两种情况下,可能使用静态方法:

  1. 一个方法不需要访问对象的状态
  2. 一个方法只需要访问其静态域

通过this指针了解static

static方法就是没有this的方法,而普通的方法是由对象调用的,所以有 this

抽象类

抽象类是普通类接口的折中,拥有普通类和接口两者的特性!!!!

  • 抽象类可以包括抽象方法非抽象方法

    • 普通类中的方法就是非抽象方法,这种方法不强制要求其子类去实现什么,继承后即可使用。
    • 而接口中的方法则为抽象方法,必须由实现接口的类去完成具体功能的实现。
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口

    • 普通类的单继承的
    • 而接口是多实现的

从上述特点可以看出:抽象类是普通类接口的折中

从另一个角度理解:抽象类要求其子类必须实现某种接口

Java中常用的类

Date

  1. Date类采用的是UTC时间
  2. 打印出的格式为:Tue Aug 20 15:25:05 CST 2019
  3. 同时包含了年月日时分秒

LocalDate

  1. 采用的是当地的标准时间,例如在中国,采用的是公历

  2. 打印出来的格式为:2019-08-20

  3. 只包含年月日

  4. 创建对象不是使用构造器,而使用静态的.of()方法

    1
    2
    3
    4
    public static void main(String[] args) {
    LocalDate a = LocalDate.of(2011, 8, 20);
    System.out.println(a.getYear());
    }
  5. LocalDate可以自定义日期

  6. 还可以计算多少天之后的日期,可用于会员日期的计算

    1
    2
    3
    4
    5
    public 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
2
3
4
5
6
7
8
9
public static void main(String[] args) {
//声明大数值类型
BigInteger a = BigInteger.valueOf(100);
BigInteger b = BigInteger.valueOf(1000);
//相当于a+b
BigInteger c = a.add(b);
//相当于a*b
BigInteger d = a.multiply(b);
}

包装类

  • 包装类和基本数据类型之间可以自动装箱拆箱
  • 用包装类做相等比较的时候,要使用equals,原因是“==”比较的是包装类声明的对象的引用
  • 包装类对象值不能改变,并且包装类都用final修饰,不能被继承

8中基本数据类型都有对应的包装类,这里用int的包装类,Integer为例:

Integer.parseInt(“1024”);

Integer.valueOf(“1024”).intValue();

这两个返回值都为int型

  1. parseInt():是Integer中的静态方法,将数据转换为int型(可以由函数名称看出)
  2. Integer.valueOf():可以将数据转换为Integer类型
  3. intValue是Integer对象的内置方法,用与将Integer类型转换为int型(但是其实由自动装箱和拆箱)

 
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×