Java学习笔记
java特点及编译运行
特点
简洁性
面向对象:封装、继承、多态
分布式
安全性和健壮性
平台无关性(或结构中立性)
可移植性
多线程
编译过程
使用字符编辑器上输入并保存Java源程序代码(.java) ;
使用编译器javac.exe对源程序进行编译,生成对应的字节码
程序(.class)[注1]; 字节码具有平台无关性,没有隐藏保密的功能
使用Java虚拟机(JVM)中的解释器java.exe对Java字节码
程序解释执行(后来为了提高速度,又引入了即时编译方式JIT);JVM需针对不同操作系统开发,分为装入、校验、运行3个阶段
*图片来源:https://zhuanlan.zhihu.com/p/32453148
JDK /JVM /JRE
JVM+运行类库(jar)=JRE
JRE+JAVA开发工具(javac.exe\jdb.exe等)=JDK
常用的java命令
java 执行命令
javac 编译命令
java doc
public class HelloWorld{
/*
*程序主入口
*/
public static void main(String[] args){
//在控制台输出一段英文:Hello World
System.out.println("Hello World");
}
}
变量与数据类型
变量
一个数据存储空间的表示,是计算机中一块特定的内存空间,有一个或多个连续的字节组成
数据类型
(基本类型)
数值
整型(int short long byte)
浮点型(float double)
非数值
boolean char
注意:
String不是基本类型,属于类类型,以“”表示字符串
对于超大型数字,采用Biglnteger或BigDecimal类型的数据进行精确计算
java 中,char是一个16位的无符号整数,用于保存单个字符时(‘1’,‘a’),可以保存专一字符(’\b’,‘\t’,‘\r’,‘\n’)
范围小的数值类型转为范围大的数值类型可自动转换,范围大的转范围小的需强制转换
使用
public static void main(String[] args){
int salary1=8500;//声明并初始化
int salary2;//先声明后初始化
salary2=8500;
int y = 3.1415926; //非法:3.1415926不是整数,需强制转换为int后赋值。
int x = (int)3.1415926; //合法:先将3.1415926转换为整数3后赋值给x。
boolean truth = 1; //非法:一般错误,不像C/C++中对布尔型赋1或0值。
float z = 3.14156; //非法:3.14156是双精度数,不能直接赋给z,需转换
float z = 3.14156f; //合法
float s = (float)3.14156; //合法:先将3.14156转换为float,再赋给s。
double z = 3.14156f;// 合法,隐式转换
}
引用类型
数组:[]
类(包括对值类型的封装类): class
接口: interface
枚举: enum
空引用(所有引用类型的默认值): null
值类型在栈(stack,或称堆栈)上分配,引用类型在堆(heap)上分配
public class ArrayTest {
public static void main(String[] args) {
int[] a = new int[2];// a={0,0,0}
int[] b = a;//复制a的地址
b[0] = b[0] + 1;// a=b={1,0,0}
System.out.println(a[0]);// 1
int n = 0;
int m = n; //复制n的值
m = m + 1;// m=1,n=0
System.out.println(n); // 0
} }
a=b={1,0,0}
System.out.println(a[0]);// 1
int n = 0;
int m = n; //复制n的值
m = m + 1;// m=1,n=0
System.out.println(n); // 0
} }