概述
作为一个面向对象语言,java支持
- 多态
- 继承
- 封装
- 抽象
- 类
- 对象
- 实例
- 方法
- 重载
源文件规则
- 一个源文件中只有一个 public 类,名称和源文件名称一致
- 可以有 0 或多个非 public 类
- package 语句应该在文件首行
- import 语句应该在 package 语句与类定义之间
HelloWorld 例程
//HelloWorld.java
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
// 专栏的“代码块”是假的吗?怎么第一次显示不出来(
java 程序编程
编译成 class 文件
javac HelloWorld.java
运行
java HelloWorld
基本数据类型
内置数据类型
- byte
1. 8 位有符号整数
2. 最小值 -128 (-2^7)
3. 最大值 127 (2^7-1)
4. 默认值 0
- short
1. 16 位有符号整数
2. 最小值 -32768 (-2^15)
3. 最大值 32767 (2^15-1)
4. 默认值 0
- int
1. 32 位有符号整数
2. 最小值 -2147483648 (-2^16)
3. 最大值 2147483647 (2^16-1)
4. 默认值 0
- long
1. 64 位有符号整数
2. 最小值 -9223372036854775808 (-2^32)
3. 最大值 9223372036854775807 (2^32-1)
4. 默认值 0
- float
1. 32 位单精度浮点数
2. 默认值 0.0f
- double
1. 32 位双精度浮点数
2. 默认值 0.0f
- boolean
1. 布尔值
2. 取值 `true` 或 `false`
3. 默认值 `false`
- char
1. 16 位的 Unicode 字符
2. 最小值 0
3. 最大值 65535
引用数据类型
- 对象、数组都属于引用类型
- 默认值是 null
- 一个引用变量可以引用任何与之兼容的类型
java 常量
java 使用 final 关键字修饰常量
- final double PI = 3.14159265359;
整型字面量
- 前缀 0 表示 8 进制
- 前缀 0x 表示 16 进制
自动类型转换
从低级向高级
- double
- float
- long
- int
- byte, short, char
强制类型转换
数据类型必须是兼容的
(type)value
java 变量类型
局部变量
类的方法中的变量
- 执行完之后会自动销毁
- 在栈上分配空间
- 没有默认值,必须先初始化
实例变量
独立于方法之外的变量,不用 `static` 修饰
- 在对象被销毁时销毁
- 只能通过方法或者语句块使外部能够获得这些信息
类变量(静态变量)
独立于方法之外的变量,用 `static` 修饰
- 多个对象共用一份拷贝
- 存在静态存储区
- 可以通过 `ClassName.VariableName` 的方式访问
- 常常被声明为常量
- 当被声明为 `public satic final` 时,变量名建议大写
java 修饰符
访问控制修饰符b站专栏怎么连表格功能也没有的
注*:子类与父类不在同一个包中,子类实例可以访问从父类继承来的 `protected` 方法,但不能访问父类实例的 `protected` 方法。
非访问控制符
static
静态变量
同一个类只有一份拷贝
静态方法
不能使用非静态的变量
final
final 变量
即赋值后不能再次赋值,即常量。
常与 `static` 一同表示一个类常量。
final 方法
父类中的 `final` 方法可以被继承,不能被重写。
final 类
不能被继承。
abstract
抽象类
不能被实例化。
表示将来子类对该类进行扩充。
不能被 `final` 修饰。
抽象方法
一种没有任何实现的方法,具体实现由子类提供。
不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含抽象方法,那么该类必须声明为抽象类。
抽象类可以不包含抽象方法。
synchronized
用 `synchronized` 声明的方法同一时间只能被一个线程访问。
transient
用 `transient` 修饰的变量在序列化时会被忽略。
volatile
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
用 `volatile` 修饰的变量在每次被线程访问时,都从主内存中重读该变量的值。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
建议在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
在效率上比较低,因此一定在必要时才使用此关键字。
//大量参考菜鸟教程 Java 部分
图片来源于网络,侵删