Java基础知识
注释、标识符、关键字
注释
public class HelloWorld {
public static void main(String[] args) {
//输出一个Hello World !"单行注释"
/*
输出一个Hello World !"多行注释"
*/
/**
* JavaDoc:文档注释
* @Description HelloWorld
* @Author 舒杰 , 文化学院
* */
System.out.println("Hello World !");
}
}
标识符
关键字
关键字不能作为标识符。
标识符
类名、变量名、方法名都叫做标识符。
标识符的首字母只能以字母(A-Z or a-z),美元符号($),或者下划线(_)开始。
标识符的后续字母可以以任意字母任意组合(A-Z or a-z),美元符号($),或者下划线(_)以及数字。
关键词不能作为标识符。
标识符是大小写敏感的。定义的Man、和man是两个不同的变量
可以使用中文,但不建议。
数据类型
强类型语言
要求变量的使用要严格符合规定,所有的变量都必须定义后才能使用。
数据类型
数值类型
整数类型
byte 一个字节,范围-128~127 默认是0;
short 两个字节,范围-32768~32767 默认是0;
int 四个字节,范围-2147483648~2147483648 默认是0;
long 八个字节,范围-9223372036754775808~9223372036754775807 默认是0;
浮点类型
float 四个字节 默认是0.0。
double 八个字节 默认是0.0。
字符类型
char 两个字节 默认是0.0。
String 字符串 默认是null。
boolean类型
boolean类型 一位(一个bit)只有ture和false两个数值
默认是false。计算机中0代表假,1代表真,所以也可以理解为默认值是0,而0对应的是false所以默认值是false;
public class shujvleixing {
public static void main(String[] args) {
//整数 :
int num1 = 10000 ; //一般使用的整数类型。
byte num2 = 127 ; //最小-128~最大127。
short num3 = 30 ; //最小-32768~最大32767。
long num4 = 100L ; //Long类型要在数字后面加L。
//浮点数 :
float num5 = 50.1F; //float类型需要在后面加上F。
double num6 = 3.1415926;
//字符 :
char word1 = '舒'; //表示单个字符,以单引号表示。
//字符串不是关键词,他是一个类
String word2 ="hello"; //表示一连串字符,以双引号表示。
//布尔值 只有ture and false 两个值
boolean flag = false;
}
}
引用数据类型
-
类 String
-
接口
-
数组
字节转换
8位(bit)=1字节或1B(byte)
1024B=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
数据类型拓展
整数拓展
二进制 以0b开头
八进制 以0开头
十六进制 以0x开头
浮点数拓展,银行业务与浮点数
float
double 本身存在舍入误差
最好完全避免使用浮点数进行比较
可以使用 BigDecimal类 数学工具类进行表示
字符拓展
字符强制类型转化
System.out.println((int)c2);
所有的字符本质还是数字。
转义字符
\t tab 制表符
\n enter 换行
类型转换
public class shujvleixing {
public static void main(String[] args) {
//整数 :
int num1 = 128 ; //一般使用的整数类型。
byte num2 = (byte)num1 ; //最小-128~最大127。
//(byte)强制类型转换,转换成byte型。
System.out.println(num1);
System.out.println(num2);
}
}
输出结果
128 -128
-
是因为在计算机中int类型是可以接受128的数值所以第一个数值是128
128在计算机里的原码是1000 0000
-
而强制类型转换之后 码的二进制表示不变,但是变成了byte的类型
而byte类型最高支持127,127在计算机里的原码是0111 1111,再加就是1000 0000了,第一位的“0”代表是正数,如果是“1”则是负数,所以最大表示127是这么来的。
-
注意,我们将强制类型转换后的1000 0000给到byte类型的num2 之后 他的第一位是“1”代表是个负值,这就是-128中,“-”负号的由来。
-
但是为什么是-128呢?是因为负数在计算机中存在的性质是补码,补码的值的计算,是按权展开,然后求和.
-
跟原码不同的是表示符号位的权重是负权重,在1000 0000 中可以理解为
1*(-2^7)+ 0*(-2^6)+ 0*(-2^5)+ 0*(-2^4)+ 0*(-2^3)+ 0*(-2^2)+ 0*(-2^1)+ 0*(-2^0)=-128
所以第二个值是-128而不是其他的负值。
关于强制类型转换
-
不能对boolean值进行转换。
-
不能转换成不相干的类型。
-
低容量转换成高容量的数值类型,不需要强制类型转换;高容量转换成低容量时才需要强制类型转换。
-
强制类型转换可能存在 溢出、精度问题
变量与常量
变量的作用域
类变量
static int num1 = 100;
实例变量
String words = "J21"; //String不是一种变量名,而是一种类
局部变量
public void He(){ int i = 100; //该方法的变量类似与C语言的局部变量但是又不是完全相同。 }
命名规范
-
所有的变量、方法、类名:要求见名知意。
-
常量:使用全大写字母以及下划线表示。
-
类成员变量、局部变量:首字母小写,单词的第一个字母是大写(驼峰原则)。
-
类名:首字母大写和驼峰原则。
-
方法名:首字母小写和驼峰原则。
常量
常量值的定义:
static final double PI = 3.14; //通过final定义常量,一般使用全大写字符表示
运算符
++、--
//===========例1==============
int a = 3;
int b = a++;
//先完成运算,运算完成了给a+1。
int c = ++a;
//先给a+1,再用a+1的值。
//最终a+2了,b的值是取了a最初的值,c的值取得是a+2之后的值
System.out.println(a);
System.out.println(b);
System.out.println(c);
/*
结果:
5
3
5
*/
//===========例2==============
byte seconds = 3 ;
short minutes = 20;
System.out.println(seconds);
minutes =(short) (seconds++ + ++minutes);
System.out.println(seconds);
System.out.println(minutes);
/*
结果:
3
4
24
*/
数学类·幂运算
double pow = Math.pow(2,3);
System.out.println(pow);
//Math.pow的类型是double类型
int pow = (int)Math.pow(2,3);
System.out.println(pow);
/*
结果:
8.0
8
*/
短路机制
int num_test = 10;
boolean flag_test = (num_test<5)&&(++num_test<20);
System.out.println(num_test);
System.out.println(flag_test);
/*
结果:
10
false
*/
与或非运算表达
-
A&B A 按位与B
-
A|B A 按位或B
-
A^B A按位异或B
-
~B 按位将B取反
<< >>运算符
0b0001_0111<<2
结果: 0b0101_1100
有时候乘法可以以移位来实现
System.out.println(2*8); //上下效果完全一样 System.out.println(2<<3);
结果:
16
16
三元运算符<?:>
x ? y : z
意思是如果x==ture 则运算结果为y,否则运算结果为false。
字符串连接符
int a = 10;
int b = 20;
System.out.println(a+b+"<-同样是a+b,左右两边为什么不一样->"+a+b);
/*输出结果:
30<-同样是a+b,左右两边为什么不一样->1020
*/
在打印函数中,如果有String类型,那么后面的+会以String类型输出。
学习:狂神说的Java基础视频