反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。
double result = Double.parseDouble(count+"");
命名规则:
1、Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此。
2、类名首字母应该大写,字段、方法以及对象(句柄)的首字母应小写。
3、对于所有标识符,其中包含的所有单词都应紧靠在一起,而且将中间单词的首字母大写。
4、若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母
字段 get set 自动生成:
Source ->Generate Getter and Setters
整合为方法
选中代码->Refactor->Extract Method...
断点 debug 调试时可以对变量添加“watch”监视
Str01+=str02//需开辟新内存空间,导致内存垃圾,尽量不要用(字符串的不变性)
字符串的不变性->常量池(String,Integer)
//格式化 format 的各种方法
//占位符,替代String = "select * from Student where stuNo=”+num+” and password=”+pw.
String sql = MessageFormat.format("select * from Student where stuNo={0} and password={1} ",1001,123456);
//动态参数,参数 数目不确定
public static void mm(String s,Object...args){}
(集合)装箱 拆箱 效率很低,安全性低
eg ArrayList.add(1);
集合+泛型==>泛型集合
//特殊
for(Map.Entry<String,Student> entity:map.entrySet()){}
//泛型类
public class Pair<T,M> {}
//泛型方法
public static <T extends Comparable>Pair<T> minmax(T[ ] nums) {}
方法需要实现 Comparable
泛型的本质就是把数据类型也作为参数进行传递。
//通配符泛型
CollectionGenFoo<? extends Collection> listFoo11 = new CollectionGenFoo<ArrayList>(new ArrayList());
//Open-Close 原则
易于修改扩展
可行性分析 -> 需求分析 -> 概要设计 -> 详细设计 -> 编码20% -> 测试 -> 部署 -> 维护
利用接口实现多态
接口最小粒度
接口里一般定义常量(public static final),可以被import
Ex:DB连接常量定义。
Java代码 - > .class - > JIT - > 机器码 - > 执行
类加载器 ClassLoader
//内部类初始化(先实例化外部类再实例化内部类)
ClassA.ClassAChild classAChild= new ClassA().new ClassAChild();
//匿名内部类(SWING常用)只能使用一次也只需求一次
抽象类(IS-A)主要用于关系密切的对象;而接口(CAN-DO)适合为不相关的类提供通用功能。
**********
四、抽象类和接口的使用:
1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
5.面向对象思想的一个最重要的原则就是:面向接口编程。
6.借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。
7.接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系;
8.接口多定义对象的行为;抽象类多定义对象的属性;
9.接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,原因就不必多说了。
10.“接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。
11.尽量将接口设计成功能单一的功能块
12.接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。
13.在接口中,所有的方法都默认为public。
14.如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。
**********
异常:(监视范围不要太大)
1 语法错误
2 运行时异常
3系统错误(Error ApplicationException)
//对被批注的代码元素内部的某些警告保持静默
@SuppressWarnings("unchecked")
“==”与“equals”
从Object层次来说,==与equals是相同的,都是比较内存地址;
很多类都Override了equals方法,最典型的是String类。