//行注释
/*
块注释
*/
1、public -> 公共的
2、class -> 定义类,结构体的高配版本
后边 -> 类名。 文件名
在一个.java文件里面,只能有一个public修饰的类,类名一定要和文件名一样
3、class{类体(属性 方法)}
4、main函数 -> 方法
5、public static
面试问题:为什么main方法被static修饰?
6、static:静态的。
7、String[] args; //定义数组---->字符串数组(string为字符串类型)
C:int arr[10]; Java:int[] arr=……
8、main函数参数意义
9、System.out.println("Hello bit!");
"Hello bit!" :字符串
System.out.println ----->printf();
println():输出并且换行
print():输出但不换行
Windows GBK进行编码
Linux UTF8进行编码
10、程序中加入中文在cmd中输入javac -encoding UTF-8 文件名.java 进行编码
命令行后面输入的为命令行参数
11、数组名.length ------>数组的长度
12、一个类生成一个.class文件
变量
1、 int 整形变量
4个字节
体现了跨平台的特性,有符号的 ,没有无符号的说法;
Integer是int的包装类。
(int:简单类型->内置类型)
public class JAVA1226{
public static void main(String[] args){
int a = 10;
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
2、long类型 长整型变量
8个字节
public class JAVA1226{
public static void main(String[] args){
long a = 10L;
System.out.println(a);
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);
}
}
3、double类型 双精度浮点型
8个字节
同理:
注意: 在底层,double组织数据的方式和整形不一样
public class JAVA1226{
public static void main(String[] args){
double a = 1.1;
double b = 1.1;
System.out.println(a*b);
}
}
4、float类型 单精度类型
4个字节
5、char字符类型
char 两个字节 ,16位字符 取值范围为 0~65535, 不表示负数只能表示字符
注意:
public class test{
public static void main(String[] args){
char ch1 = 'A';
char ch2 = '张';
System.out.println(ch1);
System.out.println(ch2);
}
}
(Unicode码表,图片来源:百度百科)
6、byte类型 字节类型
byte对应C语言的char类型,取值范围为-128~127
public class test{
public static void main(String[] args){
byte b = 130;
System.out.println(b);
}
}
注意:与C语言不同,赋值超过取值范围,Java会报错,此规则适用于上述所有类型
7、short类型 短整型
两个字节,16位字符,取值范围
-2^15~(2^15)-1
-32768~ +32767
8、boolean类型 布尔类型
boolean value = ture;
System.out.println(value);
注意:
3.boolean类型有些JVM的实现是占1个字节,有些事占1个比特位,没有明确规定。
错误示例:
boolean value = true;
System.out.println(value + 1);
String name = "zhangsan";
String name2 = "zhaosi";
System.out.print(name);
System.out.println(name2);
注意:
1、Java使用双引号+若干字符的方式表示字符串字面值。
2、和上面类型不同,String不是基本类型,而是引用类型。
3、字符串中的一些特定的不太方便直接表示的字符需要进行转义。
转义字符示例:
//创建一个字符串 My name is "张大宝"
String name = "My name is \"张大宝\";
public class test{
public static void main(String[] args){
String a = "hello";
String b = "world";
String c = a + b;
System.out.println(c);
}
)
执行结果:
public static void main(String[] args){
String str = "result = ";
int a = 10;
int b = 20;
String result = str + a +b;
System.out.println(result);
执行结果:
同时我们可以用System.out.println打印多个字符串:
int a = 10;
int b = 20;
System.out.println("a=" + a + ",b=" + b);
执行结果:
10、变量的作用域
即该变量能生效的范围,一般是变量定义所在的代码块(一个{}内)
class Test {
public static void main(String[] args) {
{
int x = 10;
System.out.println(x); // 编译通过;
}
System.out.println(x); // 编译失败, 找不到变量 x.
}
}
11、变量的命名规则
硬性规则:
1、一个变量名只能包含数字、字母和下划线。
2、数字不能开头。
3、变量名大小写是敏感的,即不可以互相替代,例如:num和Num是两个不同的变量。
软性规则:
1、变量名要具有描述性,能了解变量的含义。
2、变量名不宜使用拼音(并不绝对)。
3、变量名推荐使用名词。
4、变量名明明是推荐使用小驼峰命名法,当一个变量名由多个单词构成的时候,除了第一个单词之外,其它单词首字母应当大学。
小驼峰命名示例:
int maxValue = 100;
String studentName = "张三";
12、常量
常量指的是类型不能发生改变
常量主要有以下两种体现形式:
1.字面值常量
10 | int 字面值常量(十进制) |
010 | int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8 |
0x10 | int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16 |
10L | long 字面值常量. 也可以写作 10l (小写的L) |
1.0 | double 字面值常量. 也可以写作 1.0d 或者 1.0D |
1.5e2 | double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2 |
1.0f | float 字面值常量, 也可以写作 1.0F |
true | boolen 字面值常量, 同样的还有 false |
'a' | char 字面值常量, 单引号中只能有一个字符 |
"abc" |
String
字面值常量
,
双引号中可以有多个字符
.
|
final int a = 10;
a = 20; // 编译出错. 提示 无法为最为最终变量a分配值
常量不能在程序运行中发生修改
12、理解类型转换
Java作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有较严格的校验。
例:
int 和long/double相互赋值
int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; //编译通过
long和double表示的范围更大,不能赋值给int
可以将int赋值给double和long,但是不能将double赋值给int
结论:不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型,反之则不行
因为会损失精度。
byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失
注意:byte表示的数据范围是-128 ~ +127,256超出范围所以不能赋值
结论:使用字面值常量赋值的时候,Java会自动进行校验,判定赋值是否合理
使用强制类型进行转换
格式:
范围小的类型 范围小的的变量名 = (范围小的类型) 原本范围大的数据
int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b =false;
b = (boolean)a;
编译结果
结论:使用(类型)的方式可以将double类型强制转换成int,但是
1、强制类型转换可能会导致精度丢失。
2、强制类型转换不是一定能成功,互不相干的类型无法转换。
13、理解数值提升
int 和 long混合运算
int a = 10;
long b = 20;
int c = a + b;
long d = a + b;
结论:当int和long混合运算的时候,int会提升成long,得到的结果仍是long类型,需要使用long类型的变量来接收结果,如果非要用int来接收结果,就需要使用强制类型转换。
byte和byte的运算
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
结论:相同类型出现编译报错,是因为a和b虽然都是byte类型,但是计算a+b时会将a+b都提升为int类型计算,得出的结果也就是int,这时赋值给c,所以会出现编译报错。
由于计算机CPU通常都是以4个字节为单位读写数据,为了硬件上实现方便,类似byte和short这种低于4个字节的类型都会提升为4个字节的int去计算。
正确的写法:
此时编译通过,结果为30
提升类型总结:
1、对于不同类型的混合运算,范围小的会提升为范围大的。
2、byte / short / char 这三种类型都可以发生数学运算,在运算的时候,都会被提升为 int 类型
3、boolean 类型不能发生强制类型转换