写在前面:大家好,我是菜鸟小胖p。好久不见,最近学完了Java语法,本地积累了学习时的笔记。我会将这些Java语法笔记整理总结,发表到csdn。能力有限,哪里有错误欢迎指正!关于博客内容,如果有不懂的也可以在评论区留言,懂得不多,但知无不言言无不尽。
初识Java
第一个java程序
文件名为HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
如何运行java程序

大致过程就是,我们写好的.java文件(源文件)被编译器编译后变成.class文件(字节码),然后被JVM的类加载器加载到内存,通过字节码校验器去做一些校验,校验通过后交由解释器将字节码文件解释成计算机能够识别的机器指令。
JDK Java开发环境 ;JRE Java运行环境 ;JVM Java虚拟机

观察下面代码和执行结果:
class zzz {
public static void main(String[] args) {
System.out.println("zzz");
}
}
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}


Java中,一个类就会生成一个字节码文件。上图代码有两个类,所以生成了两个字节码文件(.class)
为何这样设置?为了方便使用,如果需要HelloWorld这个类,就加载对应的字节码文件。
数据类型
变量和类型

存储器分为内存储器和外存储器,变量均存储在内存储器中。
变量
整形
int i=10;
System.out.println(i);
一个int变量占4个字节。
什么是字节?
字节是计算机中表示空间大小的基本单位. 计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte). 我们平时的计算机为 8GB 内存, 意思是 8G 个字节. 其中 1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB. 所以 8GB 相当于 80 多亿个字节
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
4 个字节表示的数据范围是 -2^31 -> 2^31-1 , 也就大概是 -21亿 到 +21亿
int maxValue = Integer.MAX_VALUE;
System.out.println(maxValue+1);
int minValue = Integer.MIN_VALUE;
System.out.println(minValue-1);
如果运算的结果超出了 int 的最大范围, 就会出现溢出的情况。

长整型
long占8个字节,取值范围是-2^63 -> 2^63-1
long num=10L;
System.out.println(num);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
初始化长整型变量是记得在数字后面加上L
双精度浮点型
double占8个字节,浮点数在内存中的存储与整形不同,不能单纯用2^n表示其取值范围,且浮点数的存储会存在精度误差。
double num = 1.1;
System.out.println(num * num)
单精度浮点型
float占4个字节,初始化时要在数字后面加上f
float num = 1.0f;
System.out.println(num);
字符型
char在java中占2个字节
char ch='A';
- Java 中使用
单引号 + 单个字母的形式表示字符字面值.
- 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.
- 使用一个汉字表示一个字符时,报错是要用
javac -encoding UTF-8 文件名.java
字节型
byte占1个字节,范围大小是-128–>127
byte类型相加减时会进行整形提升,要用int保存。
短整型
short占2个字节,范围大小是-2^15 -> 2^15-1 ,范围较小,一般不使用。
布尔型
boolean只有两种取值,true或false。Java中的布尔型和整形不能相互转换,不能用1或0表示布尔型。
字符串型
String占8个字节,Java 使用 双引号 + 若干字符 的方式表示字符串字面值。
String s = "胖虎同学";
使用+可以进行字符串的拼接,任何类型的变量与字符串进行拼接时,都会转换成字符串。
int a=20;
int b=21;
System.out.println(""+a+b);
总结

常量
final int a = 10;
a = 20;
常量不能在程序运行过程中发生修改。
类型转换
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
- 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失。不相关的类型不能进行类型转换。
- 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.
总结

运算符
算术运算符
+-*/%
System.out.println(5/2);
System.out.println(5.0/2);
System.out.println((double)5/2);
System.out.println((double)(5/2));
System.out.println(5%2);
System.out.println(-5%2);
System.out.println(5%-2);
System.out.println(-5%-2);
Java中,不仅仅可以对 int 求模, 也能对 double 来求模。
值得注意的是,下图中i=10,而c语言是11。

关系运算符
== != < > <= >=
关系运算符表达式返回值都是布尔值。
逻辑运算符
&& || !
Java中,逻辑非!只能作用于布尔值
int a=10;
int b=20;
System.out.println(!a < b);

位运算符
& | ~ ^
移位运算符
>> << >>>
无符号右移 >>>:最右侧位不要了, 最左侧补 0.
int a = 4;
System.out.printf("%x\n", a >>> 1);
- 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方
- 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方
- 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替