JAVA基础
入门程序开发
HelloWorld.java 文件名与类名一致:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
- 编译:javac 文件名.java
- 运行: java 文件名
JDK11里新加的一个feature,目的是无需使用javac进行编译,直接使用Java运行(Java 文件名.java),他会在底层自己编译得到临时的class文件,再去执行,得到结果。
JDK组成
JDK:java开发工具包
- 开发工具:java,javac等;
- JRE:java的运行时环境
- JVM :java虚拟机,运行java程序的地方;
- 核心类库:java自己写好的程序,给程序员自己的程序调用;
数据类型
- 八大基本类型
byte short int long float double char boolean
- 引用类型
String
类型转化
- 自动类型转化
类型范围小的变量,可以直接赋值给类型范围大的变量
- 表达式的自动类型转化
在表达式中,小范围类型的变量,会自动转化成表达式中较大范围的类型,再参与运算
注意:
表达式的最终结果类型由表达式中的最高类型决定;
在表达式中,byte、short、char是直接转化为int类型参与运算;
- 强制类型转化
强行将类型范围大的变量、数据赋值给类型范围小的变量。
注意:
强制类型转化可能造成数据(丢失)溢出;
浮点型强转成整型,直接丢掉小数部分,保留整数部分返回;
逻辑运算符
- & :有一个为false、结果为false
- && : 有一个为false、结果为false、但前一个为flase,后一个条件不执行
- | :有一个为true、结果为true
- || :一个为true、结果为true,但前一个为true,后一个条件不执行
- !:!flase = true、!true = false
- ^ :相同是false,不同是true
注意:实际开发中,常用的逻辑运算符还是:&&、||、!
运算发的优先级:
()
!、-、++、–
*、/、%
+、-
<<、>>、>>>
<、<=、>、>=、instanceof
==、!=
&
^
&&
||
?:
=、+=、-=、*=、/=、%=、&=
数组执行原理
JAVA内存分配:
- 方法区:字节码文件先加载到这里
- 栈:方法运行时所进入的内存,变量也是在这里
- 堆:new出来的东西会在这块内存中开辟空间并产生地址
- 本地方法栈
- 程序计数器
public class ArrayyDemo{
public static void main(String[] args){
int arr1 = {11,22,33}
int arr2 = arr1;
System.out.println(arr1);
arr2[1] = 99;
System.out.println(arr1[1]);
}
}
首先将程序的class文件提取进入方法区,然后将main方法压栈,接着在main方法中开辟arr1这个变量的空间,然后执行等号右边的操作,将其放在堆内存中开辟的空间,将其地址存入至arr1在栈中开辟的空间,这样arr1会指向堆内存中的数组对象。将arr1中存的地址拷贝一份,存入arr2中,这样arr2也会指向堆内存中的数组对象。
方法执行原理
方法被调用的时候,时进入栈内存中运行。