注意点:
1.char在java中可以与int混用,可以自动转换;byte、short、char在计算的时候一律自动转换为int进行计算;char只能自动转成int,和byte和short之间不存在自动转型
2.低等级的数据类型可以向高等级的数据类型自动转换,但高等级的转低等级的需要强转,如果强行用低等级的接收高等级的,会报错。
3.如果用的是二维运算符来运算,就不会出现类型不符合而报错,原因是java会自动转换类型(此时用什么接收,转换的就是哪个类型)
例如:
byte a = 10;
double b = 200.0;
a += b;
此时如果用a来接收最后的结果,那么就会自动转成byte类型,然后会由于数值溢出得到一个负数。如果用b接收最后结果,那就会转成double类型,不会存在异常
4.浮点数会存在精度问题
5.boolean不参与类型转换,包括强制
6.表达式中的类型提升会自动将类型提升到最大的那个
7.一旦表达式中存在任何一个变量,整个表达式都不能当做常量,编译器无法自动处理
8.仅仅声明的变量是无法使用的,编译器不会开辟内存空间
区分大小写、不能以数字开头、不能是关键字和保留字
可以用$和—,也可以用中文,Unicode 字符集中符号大于0xC0的所有符号都可以用
1.整型除以整型得到的结果会自动舍去小数部分
2.自增自减只能用于变量,如果在前面的话就表示先运算再赋值,如果在后面就是先赋值再运算
1.二元的赋值运算符表示先进行计算之后再赋值
2.左移就是乘2,右移就是除2
3.二元运算符会自带强转,会出现精度丢失
返回一个布尔类型,注意与赋值运算符进行区分
短路:如果第一个结果就能得出表达式的值,那么就不需要继续向下判断了
实际开发中,直接使用短路的 &&、||
a > b ? a : b
通俗的理解:a大于b吗?是则返回a,不是则返回b
在使用Scanner的时候,如果出现next()系列的方法和nextLine()混用,会出现因为判断的标志不同而导致扫描出现问题
Scanner sc = new Scanner(System.in);
sc.nextInt();
sc.nextLine();
先使用next()Int然后使用next()Line,这样就会造成后面的nextLine接收到回车后立马结束扫描;
nextLine()会把nextInt(),next(),nextDouble(),nextFloat()的结束换行符作为字符串读入,进而不需要从键盘输入字符串nextLine便已经转向了下一条语句执行
究其原因:next()系列的方法只会读取数值,不会读取空格、换行符等符号,而nextline会读取前面留下的数据,这样就会将换行符传给后面的nextline导致运行结束
如果两个nextline连用的话,line会将换行也一起读取,就不会出现错乱了
不要将nextLine和next系列方法混用
常用的:\b退格,\n换行,\r换行,\t就是TAB,
break:中断
continue:继续(中断一次循环)
return:直接返回,结束方法
如果有嵌套,可以使用label
如果是在方法中使用if…else,那么一定要注意是否给出了所有情况下的返回值
即同名方法;
一个类中的多个方法具有相同的方法名,但形参列表不同,这就是方法重载
形参列表(方法签名)不同的定义:
形参数量不同/形参的数据类型不同/形参数据类型的顺序不同
一定要注意:和形参的名字无关,和返回值类型、修饰符无关,只看形参列表是否不同
Java中所有的方法都是值传递,如果传入的是基本数据类型,就会复制一份该变量的值在方法中,方法销毁,该复制值也会随之销毁;如果传入的是引用数据类型,会拷贝该引用数据类型指向的地址值,但不能修改引用的指向的地址值,可以修改该引用指向的对象,即改变对象的状态
数组是随机访问,根据数组的首地址和下标,使用寻址公式可以计算出对应的内存地址
数组的内存空间是连续的
动态初始化:初始化时不给出具体值,数组中的元素都具有默认值
静态初始化:初始化时给出具体值
注意:不可以动静结合
数组一旦初始化完毕,长度就不可以更改
1.下标越界
2.空指针
当使用指向null的引用进行一系列操作时,就会出现空指针
数组未初始化是无法使用的,但长度为0和null的数组可以认为是经过了初始化的
只能出现在形参列表的最后,本质上还是一个参数的数组,
格式: 数据类型… 变量名
栈:存放方法以及其中的局部变量
每当执行一个方法,都会将该方法的栈帧压入栈中,方法执行完毕后,栈帧销毁,其中的局部变量也随之失效
堆:new出来的对象都存放在堆上,对应有地址值,用来给外界访问,引用数据类型引用的就是这个地址值
方法区:
本地方法栈:存放的是本地的方法,即操作系统提供的方法
程序计数器:记录当前执行的行数