java 常用
强转注意事项
byte,short 定义的时候如果等号右边是整数常量,且整数常量的值不超出 byte、short 的范围, 不需要我们自己进行强制类型转换,jvm 会进行自动类型转换。
byte,short 定义的时候如果等号右边有变量参与,编译报错,需要手动强制转换类型。
char 类型参与运算,会自动转换为 int,char 转换为 int 会去 ASCII 码表查询对应的值,如果没找到,就去 unicode 码表找对应值
byte b = 10;
System.out.println(b);
/*
* 正常通过编译,运行正常
*/
byte b = 10000;
System.out.println(b);
/* 编译报错
Test.java:4: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b = 10000;
^
1 个错误
*/
int a = 1;
byte b = a+1;
System.out.println(b);
/* 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b = a+1;
^
1 个错误
*/
char a = 'a';
System.out.println(a+1);
// 编译运行正常,输出98i++和++i
为什么结果是 10 呢,我们将以上代码反编译一下并打开:
&、&&、|、||
& 没有短路效果,会同时将两侧结果都计算出来; && 有短路效果,如果符号前为 false,符号后的代码不会执行。
| 没有短路效果,会同时将两侧结果都计算出来; || 有短路效果,如果符号前为 true,符号后的代码不会执行。
java 访问控制修饰符
仅对本类可见----private
对外部完全可见----public
对本包和所有子类可见----protected
对本包可见----默认,不需要任何修饰符
java 检测字符串是否相等
一定使用 equals 方法,不要使用 ==
你可以简单地认为在 java 中,字符串存放在公共的存储池中,字符串变量指向存储池中相应的位置 例如复制一个字符串变量,原始字符串与负值字符串共享相同的字符
== 运算符只能够确定两个字符串是否存放在同一个位置,也就是说 s == sb 比较的是两个字符串的内存地址是否一样,但是完全有可 能内容相同的多个字符串副本放置在不同位置,导致s == sb为 false。
不使用 double 表示价格
原因:double 是不精确的;
方法一:把所有 元*100 变成 分 来表示,单位用 int
方法二:使用 BigDecimal 类(大的十进制数字)
java 重写(override)和重载(overload)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
内部类与一个.java 文件定义多个类
什么是内部类
定义:定义在另一个类的内部的类称为内部类(Nested Class)
一个.java 文件定义多个类
一个.java 文件可以定义多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。一个文件中可以不含 public 类,如果只有一个非 public 类,此时可以跟文件名不同 此 java 文件被编译时会按定义类的个数产生同样多个.class 文件
一个.java 文件定义多个类
使用命令行编译运行 java 程序
环境变量和系统属性(jvm 中独有的属性)
java 中使用
System.getenv("AAA")获取当前环境的环境变量 AAAjava 中使用
System.getProperty("AAA")获取 JVM 中的系统属性
在命令行中运行如上 java 程序:
系统属性的传递使用-D 开头,而且系统属性的传递必须放在 java 后
在命令行中运行引用有第三方 jar 包的 java 程序:
java 传参问题
Last updated
Was this helpful?