八大基本数据类型
int num1 = 10; //最常用byte num2 = 20; short num3 = 30; long num4 = 30L; //Long类型要在数字后面加个L/小数:浮点数 float num5 450.1F; double num6 = 3.141592653589793238462643;
long num7=23478678151254; //会报错,数字后面不加默认是int,而这个超过了int的范围
整数拓展:
进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10; int i2 = 010; //八进制B int i3 = 0x10; //十六进制x0~9A~F 16 system.out.println(i); system.out.println( i2); System.out.print1n(i3);
浮点数拓展
float f=0.1f //0.1 double d=1.0/10; //0.1 sout(f==d); 输出结果是false float d1=456456456f; float d2=d1+1; sout(d1==d2); //输出结果为true //float 表现的有限 离散 舍入误差 大约 接近但不等于 //最好不要使用浮点数进行比较 ∴银行业务不能用float和double BigDecimal
字符拓展
char c1 ='a';char c2='中'; System.out.println(c1); System.out.println( (int)c1); /强制换行 97 System.out.println(c2); System.out.println((int)c2); /强制换行 20013 //所有的字符本质还是;数字 //编码 unicode 表 :如65=A 都有对应的关系 2字节 0-65536 char c3 = ' \u0061'; system.out.println(c3); //a //转义字符 //\t 制表符 \n
类型转换
低转高不用括号 int i=128; byte b=(byte)i; //溢出了 byte -128~127 double b=i; //强制转换 高--低 //自动转换 低--高 不能对bool进行转换 不能把类型转换为不相干的类型 float a=1.3; //错误 默认是double 高->低 得强转 float a=(float)1.3;
变量作用域
public class Variable{ static int allClicks=0; //类变量 有static 静态变量
String name; //实例对象
int age; //实例对象 成员
String str="hello world" ; //实例变量 可以不初始化,从属于对象
public void method(){
int i =0; //局部变量 定义在方法里面,必须声明和初始化值 生命周期再{}之间 } }
class Text{ int a=1; } 在Text类中基本数据类型的变量a是随对象存储在堆中的而 public void text(){ int b=1; } 在text局部方法中基本数据类型的变量b是存储在栈中的,从更深层次理解为什么基本类型的实例变量在堆上创建,局部变量在栈上创建,这样做有什么好处? 如果你将一个实例变量放在栈内,那么就不存在多个线程访问同一个对象资源了,这显然是不对的,所以实例变量要在堆上创建,但是对于局部变量,是在栈上创建的,调用一次方法创建一个帧,独享一份内存区域,其他的线程是不会访问到该线程的资源,在栈上创建也会减轻GC的压力,随着该方法的结束,帧出栈,相对应的内存消除,这种局部变量占用的内存自然就消失了。
实例变量的默认初始值
int 0
布尔值默认为false
除了基本类型其余的默认值都是 如String null
除了
final 常量不可变
ctrl+d //复制当前行到下一行
cast转换
long a = 123123123123123L;int b = 123; short c = 10;byte d = 8; system.out.println(a+b+c+d); //Long System.out.println(b+c+d); //int system.out.print1n((c+d));//Int short+byte还是转换为int
幂运算
Math.pow(2,3); //2*2*2 工具类
短路运算
//短路运算 int c = 5; boolean d = (c<4)&&( c++<4); system.out.print1n(d);//false; System.out.println(c);//5 ∵c<5判断错误了之后,后面就不判断且执行了
位运算 效率极高
A= 0011 1100
B =0000 1101
A&B = 0000 1100
A/ B = 0011 1101
A^B = 0011 0001
~B =1111 0010
2*8=16 2*2*2*2 sout(2<<3);//底层是二进制 << *2 >> /2 0000 0001 //1 0000 0010 //2 0000 0100 //4 0<<123 //位运算得从1开始
字符串连接
//字符串连接符+ , string int a=10; int b=20; system.out.println( ""+a+b); //1020 字符串拼接了 System.out.print1n(a+b+""); //30
三目运算符
String type =score <60?"不及格":"及格";
进入CMD
再地址如 d:/1java 前面输入cmd
生成文档
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
new Scanner(System.in); //然后按alt+enter Scanner scanner = new Scanner(System.in)