java基础之静态代码块、构造代码块

静态代码块、构造代码块,成员变量,构造方法

  1. 静态代码块只执行一次,所以比较合适的还是放在单例的类里面,做一些初始化的事情,且优先于任何类里面的东西,除非有static修饰的别的变量或者方法,在他之前。
  2. 构造代码块优先级也很高,但是低于静态代码块和成员变量,无论是否是static的成员变量,因此可以做一些成员变量的防空判断在构造代码块里面。
  3. 构造方法,优先级低于前两个,但优于普通方法,所以你想要调用一个类里面的public方法的话,必须先new,用new出来的对象才可以.出来该方法。
思考:那么一个类里面的public static的方法,是什么时候加载的呢?

答案:一个类里面所有static修饰的东西(代码块,变量,方法),是按照你写的顺序去执行的。

获取随机数的注意项

今天用findbugs扫了一下项目,果然有惊喜,发现很多当初想当然的错误。其中有个粗心大意的错就是获取一个0-999的随机数的方法。
return (int)Math.getRandom() * 1000
自己也是太久没写了,有点忘记优先级了,以为先算的乘法,被findbug扫出来了,才知道,这个方法始终会获得0,自己修改了之后加了个括号。但是看到findbugs上面的建议,是用Random.nextInt()这个方法。才知道其实java.util包下面其实早就帮我们想好了,只不过自己还是用Math里面的自己乘,有点笨了。
早在jdk1.2的时候就已经有这个方法了

Collection接口

自己想写一个判断一个List是否为空的方法,但是想到虽然List用的最多,但是还是多抽一层吧,因此想到用Collection,然后用的泛型E,但是真好玩,当你用泛型类的话,你的方法前面就要多加一个东西来表明你是个泛型。通常一个方法就public/private + static/不加 + 返回值的类型 + 方法名 + 参数(形参/实参)。但是泛型的方法,就多了<E> / <T>

public static <E> boolean collectionEmpty(Collection<E> collections) {
		if (collections == null || collections.size() == 0) {
			return true;
		}
		return false;
	}

instanceof用法

一般来说,当你写一个通用方法,里面的参数是ObjectET,会用到这个instanceof来判断参数的类型。但是该方法有个很好玩的点是,如果你传进来的是ListSet,那么你去直接instanceof这两个类的话,是可以的,但是你如果去instanceof他们的父类Collection的话,也是true。因此这个用法还是最好精确到你想要直接操作的类。

		FaEntity fa = new SonEntity();
		if (fa instanceof FaEntity) {
			System.out.println("---- fa ---");
		}
		if (fa instanceof SonEntity) {
			System.out.println("---- son ---");
		}
		SonEntity son = new SonEntity();
		if (son instanceof FaEntity) {
			System.out.println("---- fa111 ---");
		}
		if (son instanceof SonEntity) {
			System.out.println("---- son111 ---");
		}

运行结果:

---- fa ---
---- son ---
---- fa111 ---
---- son111 ---

Map的循环

如果单纯拿值的话,可以用keySet,但是循环遍历整个map的话,还是推荐用entrySet来遍历。

		Map<String, TestEntity> nowDevs = new HashMap<>();
		Set<Entry<String, TestEntity>> entrySet = nowDevs.entrySet();
		for (Entry<String, TestEntity> iterater : entrySet) {
			System.out.println(iterater.getKey());
			System.out.println("---------------");
			System.out.println(iterater.getValue());
		}

Set如何保证去重?

其实就是根据你add进去的Ehashcode和该类里面的equals方法,因此想要改变一个E放进Set里面的规则的话,只需要@Override hashCodeequals就可以了。
简单的例子来说:在我们的实体类里面,跟DB里面的数据应该是对应的。所以primary key 'ID'应该是唯一的,所以可以单纯的去用ID去判断是否是同一个entity。

个人复习java基础的小笔记,因此并没有太多的逻辑顺序在里面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值