《突破程序员基本功16课》——表达式、流程控制陷阱

JAVA 常见的阿Java对象建立5种方法

new 构造器

反序列化,从IO流恢复对象

反射 Class对象的newInstance()方法

使用clone()方法

包装类、String 使用直接量创建对象

字符串

    在编译前就能确定的字符串直接量(整个的、拼接的),都会在字符串池中共用一个值。

    但程序运行时才能确定的连接表达式(有变量、调用方法),则会各自不同。

    例外:所有变量都可以执行“宏替换”,那么在计算时就能确定字符串的值。(会对s1、和len执行“宏替换”)

代码2,会造成String对象“Hello”不被引用但会一直在字符串池中,不会被回收,造成内存泄漏。


表达式类型的陷阱

强类型语言:所有变量必须声明类型,类型不可更改,只可放该类型数据。

变量自动提升等级

a += 5;     a = a+5;

上边两个表达式不等价。

a += 5;等价于 a = (a的类型) a + 5;  即复合运算符包含隐式类型转换。即容易造成高位截断。

报错“非法字符:\XXX”的错误提示时,多半是输入法全角的问题

注释报错:

    注释中的内容被识别为Unicode的话,容易报错。

split()方法分割字符串

注意:split()方法的参数是正则表达式,正则表达式的"."可匹配任意字符。想要达到分割的目的,需使用转义字符"\\."

支持正则表达式的String()方法

1、matches(String regex)

    通知此字符串是否匹配给定的正则表达式。

2、replaceAll(String regex, String replacement)

    使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。

3、replaceFirst(String regex, String replacement)

    使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的第一个子字符串。

4、split(String regex, int limit)

    根据匹配给定的正则表达式来拆分此字符串。

split(String regex)

    根据给定的正则表达式的匹配来拆分此字符串。

多线程的陷阱

三种方式启动多线程

继承Thread类的方法效果最差

  • 不能继承其他类

  • 多个线程是多个Thread的子类,共享数据较麻烦

  • 要用start()方法启动线程

Runnable、Callable接口实现,本质上看是一样的。只是call()方法可以声明抛出异常和返回值。

线程进入同步块、方法时,必须先获得其同步监视器。

同步代码块,程序显式地指定同步监视器;

同步非静态方法,this——即调用该方法的对象;

静态同步方法,该类本身;

if-else 陷阱

else的隐藏条件:不满足else之前的条件。

即——if(age > 40 && age <= 20)

猜你喜欢

转载自blog.csdn.net/ImSanJin/article/details/82496321