JavaSE核心基础

第一阶段

良好的编码规范

重构

day01

如何学编程

  • 明确需求

  • 分步骤实现以上需求

Java的三大平台

Java SE: Java标准平台,允许开发软件运行在电脑桌面上(用户需要下载,安装)

Java EE: Java企业平台,针对Web方向

Java ME: Java微型平台

多态的条件(继承)

  • 继承
  • 覆盖(重写)
  • 父类引用指向子类对象

多态的好处

提高了程序的可拓展性和可维护性,屏蔽了不同实现类之间的实现差异,从而可以做到通用编程。

接口和抽象类的区别

相同点:

  1. 都可以定义抽象方法
  2. 都不能创建对象
  3. 子类继承抽象父类必须实现抽象父类中的所有抽象方法;实现类实现接口必须实现接口中所有的抽象方法

不同点:

  1. 接口中必须都是抽象方法和常量,抽象类中可以定义普通方法
  2. 接口可以多继承,抽象类只能单继承
  3. 抽象类用于约定子类应该具备的功能;接口用于约定实现类应该具备的功能

day04

this关键字

① 只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用它来调用构造方法

② 在构造方法中,使用this调用构造方法的语句必须是该方法的第一条执行语句,且只能出现一次

③ 不能在一个类的两个构造方法中使用this互相调用

this三种用法

①调用成员变量(了解即可)

②调用其他成员方法(非static)

③调用本类其他构造方法

super关键字

① 通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。

② 如果子类构造方法没有显式调用父类构造方法时,那么jvm会默认调用父类的无参构造方法super()

super三种用法

①访问父类非私有字段(了解)

②访问父类非私有方法

③访问父类构造方法

static关键字

① 在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象

②在类中,被static修饰的成员变量和成员方法不属于对象,而是属于类的,被类的所有实例或对象所共享

③ 当类被加载时,静态代码块会执行,并且在类第一次使用时才会被加载,只会加载一次

静态方法特性

【1】静态方法中可以访问静态变量和类的其他静态方法,但不能访问非静态的

(类的字节码文件首先被加载到方法区/静态区,并为静态变量初始化并分配内存空间,而类的实例对象可能还没有创建和初始化,内存当中是【先】有的静态内容,【后】有的非静态内容。)

【2】实例方法中可以访问静态成员(静态变量和静态方法)

(静态成员在类加载的时候就已经被加载并分配好内存空间了,在实例对象创建前就已经被加载了)

【3】静态方法当中不能用this

(this代表当前对象,通过谁调用的方法,谁就是当前对象)

final关键字

① final修饰的类不能被继承

② final修饰的方法不能被子类重写

③ final修饰的变量(成员变量和局部变量)是常量,只能赋值一次

jvm扫描字节码文件

1》读取字段,计算未来new对象时所需要的堆空间

2》读取方法,标记方法签名,方便未来调用

3》扫描静态变量并分配内存空间

内部类

  • 静态内部类:使用static修饰的内部类,那么访问内部类直接使用外部类名来访问

  • 实例(成员)内部类:没有使用static修饰的内部类,访问内部类使用外部类的对象来访问

  • 局部(方法)内部类:定义在方法中的内部类,一般不用

  • 匿名内部类:特殊的局部内部类,适合于仅使用一次的类

    [1] 当一个类只使用一次时,可以声明成匿名内部类

    [2] 匿名内部类必须有实现存在

枚举概述

  • 专门用于定义可罗列的常量值
  • 是一种特殊的类,其中的枚举项(常量值)都是public static final 类名 的类型
  • 可以声明变量,且变量的取值必须是枚举中定义的公共静态常量值

day05

工具类实现方式

  • 静态方法(私有化构造器,方法使用static修饰)
  • 单例

单例模式

目的:保证在整个应用中某一个类有且只有一个实例(一个类在堆内存只存在一个对象)

饿汉模式(线程安全)

  1. 创建该类的一个对象(用private static final修饰)
  2. 阻止外界实例化
  3. 提供单例的公共访问方法

(确定这个单例未来一定会用,用饿汉模式:立即创建)

懒汉模式(线程不安全)

  1. 创建该类的一个对象并赋为空(用private static修饰)
  2. 阻止外界实例化
  3. 提供单例的公共访问方法

(不确定这个单例用不用,用懒汉模式:延迟创建)

包装类概述

把一个基本数据类型封装到一个包装类中,类中向外提供了方法来操作这个基本数据类型

为什么需要包装类

在Java中,很多类的方法都需要接收引用类型的对象,此时无法将一个基本数据类型的值传入,通过包装类可以将基本数据类型的值包装为引用数据类型的对象,对象可以做更多的功能。

Integer常用方法

valueOf(int/String):将转换为

toString():返回一个表示该 值的

intValue():将转换为

parseInt(String):将转换为

*注:*Integer是int和String之间进行转换的桥梁

自动装箱

基本数据类型 —-直接赋值—-> 包装类对象

自动拆箱

包装类对象 —- 直接赋值 —-> 基本数据类型

包装类缓存设计

例:Integer包装类

Integer 在初始化的时候已经初始化好了256个Integer对象,并放到一个数组缓冲区中,如果范围在-128 到127,Integer 对象是在IntegerCache . cache 产生,会复用已有对象,直接从缓存中取, 这个区间内的 Integer 值可以直接使用==进行判断,如果超过了缓存的范围,都会在堆上产生新的对象,并不会复用已有对象,而是直接new一个新对象,所以超出范围再进行比较时结果为false,推荐使用 equals 方法进行判断。

BigDecimal

  1. 只要使用BigDecimal,一定使用含字符串的构造 。

day06

不可变字符串String

String在内存中是以字符数组的形式存在,String对字符数组进行了封装,并提供了只读的形式来操作这个字符数组。

String—-不可变字符串:当String对象创建完毕之后,它们的值在创建后就不能更改,一旦改变就变成了一个新的对象,因不可变,所以可以共享。程序当中直接写上的双引 字符串,就分配在方法区的常量池中。

程序当中所有的双引 字符串,都是String类的对象。

字符串比较(== ,equals)

  • ==用于比较两个字符串对象的内存地址是否相同
  • equals方法用于比较两个字符串中的字符值是否相等

**注:**如果比较双方一个常量一个变量,推荐把常量字符串写在前面。

重写equals方法

判断字符串非空


可变字符串

StringBuilder/StringBuffer: 当对象创建完毕之后,内容可以发生改变并且对象仍保持不变

(StringBuilder 和 StringBuffer 的区别 )

*相同点:*都是字符串可变缓冲区,api提供了相同的增删改查操作

*不同点:*StringBuffer(jdk1.0)线程安全但效率低;StringBuilder(jdk1.5)线程不安全但效率高

***注:***通常情况下,如果创建一个内容可变的字符串对象,应优先考虑StringBuilder类

StringBuffer(StringBuilder)和String的区别

① String类定义的字符串是常量,一旦创建后,内容和长度都是无法改变的;StringBuffer(StringBuilder)表示字符容器,其内容和长度可以随时修改。

②String类重写了Object的equals()方法,而StringBuffer(StringBuilder)没有重写。

③String类可以用操作符+进行连接,而StringBuffer(StringBuilder)对象之间不能。

自动扩容机制

初始化默认容量是16的可变字符串,如果超过了默认容量,则会自动进行扩容,每次扩容规则是(当前最大容量 + 1)* 2;

day07

Date

表示特定的瞬间,精确到毫秒

:可以自动设置当前系统时间的毫秒时刻

:指定long类型的构造参数,可以自定义毫秒时刻

:把日期对象转换为对应的时间毫秒值

SimpleDateFormat

:用给定的模式(格式)来指定格式化或解析的标准

  • 格式化(format):按照指定的格式,将Date类型格式化为String类型
  • 解析(parse):按照指定的格式,将String类型解析为Date类型

Calendar

Calendar类用于完成日期和时间字段的操作,Calendar本身是一个抽象类,不可以被实例化,通过调用其静态方法getInstance获取对象(此对象是单例的)

Date与Calendar之间相互转换:

方法会返回一个表示Calendar时间值的Date对象

方法接收一个Date对象,返回一个Calendar对象

小贴士:

西方星期的开始为周日,中国为周一。

在Calendar类中,月份的表示是从0-11分别代表1-12月。

日期是有大小关系的,时间靠后,时间越大。

System

:返回与1970年01月01日00:00点之间的毫秒差值

:将数组中指定的数据拷贝到另一个数组中

数组拷贝

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月3日
下一篇 2022年1月3日

相关推荐