一些知识点:Java基础(1)

      在这个春暖花开而又特殊的季节,整理一下过去的笔记,梳理自己在过去的9个多月的时光中,实习的所见所闻。回想起去年此时,我正借了一本书,照着书本正着手准备人生的第一个Web项目。。。历历在目。


类中静态域包括静态方法、静态变量、静态代码块。类加载时按顺序初始化静态变量和静态代码块。

静态方法不能被覆盖,如果父类中的静态方法在子类中重新定义,那么父类中定义的方法被隐藏。

创建一个对象时,new一个类会调用该类的无参构造方法,创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行。

普通初始化块在每一次创建对象时执行。初始化块是一段固定执行的代码,它不能接收任何参数,编译Java类后,初始化块中的代码会被“还原”到每个构造器中,且位于构造器所有代码的前面。

final修饰符表示一个类/方法是终极的不能作为父类/覆盖。final修饰的引用变量不能被重新赋值,但可以改变引用类型变量所引用对象的内容。

Java中的每一个类都源于java.lang.Object类

在任何情况下,finally块中的代码都会执行,即使之前有return语句,但是也存在特例如下:

		try {
			System.exit(1);
		} finally {
			System.out.println("method ..");
		}

关于try{...}catch{...}finally{...}的详尽之处在此推荐一篇文章-Java finally语句到底是在return之前还是之后执行?

抽象类没有任何具体的实例,但是有构造方法。抽象方法非静态,非抽象类中不能包含抽象方法。

如果抽象类的子类没有实现所有被继承的父类抽象方法,就必须将子类定义为抽象类。即使父类是具体的,子类也可以是抽象的。

大的数计算或高精度浮点值计算使用BigInterger和BigDecimal类

类型转换时,存在空格将会抛异常,比如表单中输入的数据末尾不小心加了个空格存到数据库了。。。或者数字中间有空格(这个就略奇葩了)。。

		String a = "123  ";
		Long.valueOf(a.trim());

		String b = "123 321";
		Long.valueOf(b.replaceAll("\\s", ""));

JVM使用常量池来管理字符串

匿名内部类没有类名,不能定义构造器,系统在创建匿名内部类时,会立即创建匿名内部类的对象,因此匿名内部类不能是抽象的。

枚举类:实例有限而且固定的类。对于普通的类,我们可以创建任意个实例。而枚举的所有实例均在类中已列出,系统会自动添加 public static final 修饰。枚举类不支持 public 和 protected 修饰符的构造方法,一定要是 private 或没有修饰符的构造方法。因此,枚举对象是无法在程序中通过直接调用其构造方法来初始化的,通过 类名.枚举值 或者Enum的 valueOf(Class<T> enumType,String name)方法返回该枚举类实例。

泛型即在定义类、接口、方法时使用类型形参,这个类型形参在声明变量、创建对象、调用方法时动态地指定。

如果除去对象的基本类型外,实现方法是相同的,那么我们就可以用泛型实现来描述这种基本功能。例如List接口的定义,这个E即类型形参,可以传入不同的类型实参,从而产生无数个List接口。

public interface List<E> extends Collection<E> {
       // ... 
}

不管泛型的实际参数是什么,它们在运行时总有相同的类。因为不管为泛型的类型形参传入哪一种类型实参,对于Java来说,它们依然被当成同一个类处理,在内存中也只占用一块内存空间,因此静态域的声明和初始化不允许使用形参。

		List<Integer> ilist = new ArrayList<>();
		List<String> slist = new ArrayList<>();
		System.out.println(ilist.getClass() == slist.getClass());//true

如果Foo是Bar的子类,G是具有泛型申明的接口G<Foo>不是G<Bar>的子类,而Foo[]依然是Bar[]的子类型;例如:String是Object的子类,List<String>不是List<Object>的子类而String[] 是Object[] 的子类,可以把String[] 赋给Object[]。

Object[]的类型是[Ljava.lang.Object,数组每一维度使用一个前置的“[”字符描述,这是Class类文件中的字段表集合;而Object的类型是java.lang.Object,

 泛型擦除:当把一个具有泛型信息的类赋给另一个没有泛型信息的对象时,所有在尖括号之间的信息都被扔掉

		List<String> slist = new ArrayList<>();
		slist.add("a");
		slist.add("b");
		//该List 对集合元素的类型检查变成了类型参数的上限(即Object)
		List list = slist;
		Object l1 = list.get(0);
		String l2 = (String) list.get(0);
Java中输入输出流,流的流向根据内存划分,写入内存即输入流

自动装箱与拆箱:Integer与new Integer总不相等,Integer与int比较总会拆箱,总是相等

foreach循环中的迭代变量不是集合元素本身,因此修改没有意义,更不能调用remove()删除

.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的。类的Class类实例是通过.class获得的,显然,类没有.getClass()方法。

switch后面的类型 基本数据类型中的byte,short,int,char + 枚举类型 + String 类型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值