《突破程序员基本功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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值