Java前言(特性、特点、核心机制等)

1.Java主要特性(泛泛)
安全、体系结构中立、解释性、性能略高、原生支持多线程
2.Java语言特点(主要)
特点一:面向对象
两个基本概念:类、对象
三大特性:封装、继承、多态
特点二:健壮性
吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请和释放等),提供了一个相对安全的内存管理和访问机制
特点三:跨平台性
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都有运行
原理:只要在需要运行java应用程序的操作系统上,安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
3.Java两种核心机制
Java虚拟机、垃圾收集机制
4.什么是JDK、JRE
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用单独安装JRE了。
其中的开发工具:编译工具(javac.exe)打包工具(jar.exe)等

JRE(Java Runtime Environment Java运行环境)
包括JVM和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK = JRE + 开发工具集
JRE = JVM + JavaSE标准类库
5.JDK目录说明
bin:开发工具集
include:调用C语言部分

Java变量类型

局部变量
方法、构造方法、语句块中定义
变量的声明和初始化都是在方法中,方法结束,变量自动销毁
访问修饰符不能用于局部变量
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用
局部变量在栈上分配
成员变量(实例变量、类的属性)
定义在类中,方法体之外,在创建对象的时候实例化
成员变量在对象创建的时候创建,在对象被销毁的时候销毁
访问修饰符可以修饰成员变量
成员变量可以被类中的方法、构造方法和特定类的语句块访问
根据其类型都有默认初始化值

整型(byte、short、int、long)0 浮点型(float、double)0.0 字符型(char)0(或’\u0000’) 布尔型(boolean)false 引用数据类型(类、数组、接口等)null

类变量(静态变量)
声明在类中,方法体之外,必须声明为static类型(静态类型)。
无论一个类创建了多少个对象,该类只拥有类变量的一份拷贝。
类变量除了被声明为常量外很少使用。常量是指声明为 public/private,final 和 static 类型的变量。
常量初始化后不可改变。
类变量存储在静态存储区。经常被声明为常量,很少单独使用static声明变量。
类变量在程序开始时创建,在程序结束时销毁。
类变量被声明为 public static final 类型时,类变量名称必须使用大写字母。
如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致
局部变量vs成员变量
相同点
定义变量的格式、先声明后使用、变量都有其对应的作用域
不同点
在类中声明为的位置不同、权限修饰符不同、默认初始化值不同、内存中加载的位置不同

Java基本数据类型

内置数据类型
※六种数字类型(四个整数型,两个浮点型),一种字符类型,一种布尔类型
byte:8位,默认值0,有符号的以二进制补码表示的整数,范围为-128(-2^7)~127(2^7-1)
short:16位,默认值0,有符号的以二进制补码表示的整数,范围为-32768(-2^15)~32767(2^15-1)
int:32位,默认值0,有符号的二进制补码表示的整数,范围为-2147483648(-2^31)~2147483647(2^31-1),一般整型变量默认为int类型
long:64位,默认值是0L,有符号的以二进制补码表示的整数,范围为(-2^63)~(2^64-1)
float:单精度,32位,默认值是0.0f
double:双精度,64位,默认值是0.0d
boolean:默认值是false
char:单一的16位Unicode字符,范围(\u0000)~(\uffff)
引用数据类型
数组、类都是引用数据类型,默认值为null
Java常量
使用final来修饰,常量在程序运行时不能被修改
自动类型转换
从低级到高级
byte,short,char->int->long->float->double
※boolean类型不能进行类型转换
※对象类型不能转换成不相关类的对象
※由高到低必须使用强制转换
※转换过程中会丢失精度
※浮点数到整数的转换是通过舍弃小数,而不是四舍五入
强制类型转换
隐式类型转换

Java修饰符

final修饰符
变量:
可以被显式地初始化且只能初始化一次。
final对象的引用不能被改变,但里面的值可以改变
方法:
final方法可以被子类继承,但不能被子类修改
类:
final类不能被继承,没有任何类可以继承final类的任何特性
abstract修饰符
类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,该类必须被声明为抽象类。
抽象类可以包含抽象方法和非抽象方法。
方法:
抽象方法是一种没有任何实现的方法,该方法的具体实现由子类提供。抽象方法不能被声明为final和static。
任何继承抽象类的子类必须实现父类所有的抽象方法,除非子类也是抽象类。
抽象方法的声明以分号结尾。
synchronized修饰符
synchronized关键字声明的方法同一时间只能被一个线程访问。synchronized修饰符可以应用于四个访问修饰符。
transient修饰符
序列化的对象包含被transient修饰的成员变量时,JVM跳过该特定的变量
volatile修饰符
volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同 的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。