JAVA学习笔记-DAY3
引用类型 VS 指针
- 在Java中,引用类型的变量非常类似于C/C++的指针。
- 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
- 如:Site site = new Site("Runoob")。
- new相当于C语言中的malloc,结果是在堆内存中开辟了一片空间
- site就是在栈上的引用,相当于C语言中的指针,指向堆中的地址
- 不需要进行free(site),JAVA中有垃圾回收器GC自动回收
基本变量类型
局部变量 VS 实例变量
- 局部变量存在于虚拟机JVM的栈上,实例变量存储在堆中
- 局部变量在方法、构造方法、语句块之内
- 成员变量存在于类中,但是在方法、构造方法、语句块之外
- 局部变量必须在使用之前声明,实例变量可以在使用之后声明
- 对象被初始化之后,对应的实例变量(成员变量)也就确定了
- 成员变量不初始化也能使用,因为有默认值,局部变量只有初始化了才能使用,因为没有默认值
- 一般将成员变量的访问权限设置为私有,需通过共有的方法对成员变量进行访问
【问题】
- 成员变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObjectReference.VariableName
静态变量static VS 常量final
常量和静态变量都用于存储整个程序都可能使用到的共享的数据,都具有唯一性和共享性
静态变量
- 整个编译期间都存在,被所有实例共享访问
- 可通过类名访问,也可通过实例名访问
- 不管被定义在哪里,都是最先被初始化的
- 在运行期间可以修改
常量
- 在编译时就已经初始化,之后不可以修改
数组
数组变量的声明和创建
点击查看代码
//数组变量的声明
double[] myList; // 首选的方法
//double myList[]; // 效果与上面的相同,但不是首选方法
//数组变量的创建
arrayRefVar = new dataType[arraySize];
//数组变量的创建和声明一起完成
dataType[] arrayRefVar = new dataType[arraySize];
For-Each 循环(加强型循环)
JDK 1.5 引进,用于在不使用下标的情况下遍历数组
使用方法:
点击查看代码
public class TestArray {
public static void main(String[] args) {
double[] myList = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for (double element: myList) {
System.out.println(element);
}
}
}
日期和时间
日期时间 API

修饰符
访问控制修饰符

注意:private、protected不能修饰外部类,default是包级别的访问控制修饰符
protected
子类与基类在不同包中时:
子类实例可以访问其【从基类继承来的】protected 方法,
而不能访问【基类实例的】protected方法。
接口、接口的成员变量、接口的成员方法不能声明为 protected
访问控制和继承
- 父类中声明为 public 的方法,子类中也必须为 public。
- 父类中声明为 protected 的方法,子类中不能声明为 private。
- 父类中声明为 private 的方法,不能够被子类继承。
非访问控制修饰符
-
static静态
修饰类、方法、变量;
独立于对象,静态方法不可使用非静态变量; -
final常量
修饰类、方法、变量;
类不可被继承、方法不可被重定义、变量不可被修改;
创建变量时,通常和static一起使用:'public static final int BOXWIDTH = 6'; -
abstract抽象
修饰类、方法
不包含任何实现,由子类完成实现,所以抽象基类不能用来实例化对象
创建类时不能与final一起使用
创建方法时不能与final、static一起使用
如果一个类包含抽象方法,那么该类一定要声明为抽象类,抽象类也可不包含抽象方法
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
抽象方法的声明不加'{}',如:abstract void m(); //抽象方法 -
transient
用来预处理类和变量的数据类型,JVM会跳过被修饰的变量 -
synchronized
synchronized主要用于方法保护,修饰的方法只能同时被一个线程访问 -
volatile
volatile主要用于线程同步,修饰的成员变量在被线程访问时必须从共享内存中读入,值被修改时,线程必须将修改后的值同步给共享内存
程序执行控制语句
主要用于数组的增强型 for 循环(JAVA5引入)
点击查看代码
for(声明语句 : 表达式)
{
//代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
switch case语句
Java SE 7开始,switch支持字符串型
default 分支不需要 break 语句
常用类
Number类


所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。
抽象类,属于 java.lang 包,是一个抽象类,主要作用是为各种数值类型提供统一的转换方法
Math类
数学工具类,位于 java.lang 包中,包含执行基本数值运算的静态方法。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。
Character类
用于对单个字符进行操作,在对象中包装一个基本类型 char 的值
StringBuffer类
- 对于有修改需求的字符串,需要使用 StringBuffer 和 StringBuilder 类。
- StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象
- StringBuffer在访问时是对对象本身进行操作,不会产生对象副本
- StringBuilder在JAVA5中被提出,该方法不安全(不能被线程同步访问)
- 因StringBuilder类速度快,若非应用程序要求线程安全,一般都是用StringBuilder类
Arrays类
该类提供的四种方法都是静态的

日期LocalDate、格式化DateTimeFormatter
是Java 8 引入的日期类
- 日期LocalDate:年-月-日
- 时间LocalTime:时-分-秒
- 日期时间LocalDateTime:年-月-日-时-分-秒
- 时区日期时间ZonedDateTime
- 时间戳Istant
Date类
由java.util包提供,用来封装当前的日期和时间
正则表达式
该笔记剩余部分暂时留空,需要时再添加

浙公网安备 33010602011771号