美文网首页
笔记——Java零碎知识摘录(一)

笔记——Java零碎知识摘录(一)

作者: 木溪bo | 来源:发表于2018-09-28 14:03 被阅读3次

    ——》个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主精华、书籍

    1、android:exported属性:主要作用是:是否支持其它应用调用当前组件。默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。虽然说加了这个属性,能使其他的程序不能调用。但是,需要注意的是,如果两个程序的userid是一样的话,exported=”false“就没有用了。

    2、Java中的简单类型从概念上分为四种:实数、整数、字符、布尔值。但是有一点需要说明的是,Java里面只有八种原始类型,其列表如下:

    实数:double、float

    整数:byte、short、int、long

    字符:char

    布尔值:boolean

    复杂类型(对象类型)基本类型的内存模型本质上是不一样的,简单数据类型的存储原理是这样的:所有的简单数据类型不存在“引用”的概念,简单数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面只有这八种数据类型是这种存储模型;而其他的只要是继承于Object类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,基本类型是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。

    Integer是int的封装类,里面有很多进行处理的静态方法

    Integer是对象而int不是,内存的分配位置也不一样

    Integer的属性和其他类一样的,在方法里都是引用传递;而基本类型int是值传递!

    基本数据类型由于长度固定,且需要空间比较少,所以直接存储在栈中;而对象比较大,所以栈中只存储一个4btye的引用地址(逻辑地址)。

    栈内存和堆内存区别:

    >1.当定义一个变量时,java虚拟机就会在栈中为该变量分配内存空间,当该变量作用域结束后(使用完)后就会马上释放被系统分配给新的变量使用。

    >2.如果java中是new的方式创建一个变量对象,就会在栈内存中存放对象的引用地址,对象值则存放于堆中,即使对象的作用域结束也不会立刻释放,直到系统GC回收

    3、java反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。即:java在运行状态中反射知道一个类里面的所有方法和属性;通过反射获得对象后,能够调用对象的任意属性和方法。

    java内省:内省基于反射实现,主要用于操作JavaBean,通过内省 可以获取bean的getter/setter,只要看到有getter或者setter就认为这个类有那么一个字段,比如看到getName() 内省就会认为这个类中有name字段,但事实上并不一定会有name。

    java反射.png

    4、泛型:

    “ ? ”是通配符,泛指所有类型:一般用于定义一个引用变量,这么做的好处是,如下所示,定义一个sup的引用变量,就可以指向多个对象。

    SuperClass<?> sup = new SuperClass<String>("lisi");

          sup = new SuperClass<People>(new People());

          sup = new SuperClass<Animal>(new Animal());

    若不用?,用固定的类型的话,则:

    SuperClass<String> sup1 = new SuperClass<String>("lisi");

    SuperClass<People> sup2 = new SuperClass<People>("lisi");

    SuperClass<Animal> sup3 = new SuperClass<Animal>("lisi");

    这就是?通配符的好处。

    ? extends T, ?是指T类型或T的子类型

    ? super T  ,?是指T类型或T的父类型

    这个两个一般也是和?一样用在定义引用变量中,但是传值范围不一样

    T和?运用的地方有点不同,?是定义在引用变量上,T是类上或方法上;如果有泛型方法和非泛型方法,都满足条件,会执行非泛型方法。

    带不同泛型的ArrayList在编译后生成的Class是相同的!也就是说,泛型在编译生成字节码文件时会被”擦除”;不管ArrayList<E>带什么泛型,在编译后都是ArrayList所对应的字节码文件。

    eg:

    泛型擦除.png

    9、泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。参数化类型就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参),由传入的实参类型决定的参数类型。

    10、

    强引用:直接的对象引用;

    软引用:当一个对象只有软引用存在时,系统内存不足时此对象会被gc回收;

    弱引用:当一个对象只有弱引用存在时,此对象会随时被gc回收。

    11、try catch是直接处理,处理完成之后程序继续往下执行;throw则是将异常抛给它的上一级处理(是明确的一定会抛出异常),程序便不往下执行了。

    throws并不是抛出一个实际的Exception而是一个异常声明,它声明这个方法可能会抛出一个异常,注意是可能,所以在没有异常的情况下也是可以用throws的,而throws本身的作用也是用来提高程序的健壮性,反过来,如果这个方法的的确确的有一个异常,那么编译器会强制让你加上throws这个异常声明。

    try这个程序块名字很易懂,就是尝试,尝试能不能正常的走完整个作用域,所以我们在try块里经常放上可能会抛出异常的程序段。而catch恰好就是处理try里抛出来的异常,其中catch的参数列表接收的是一个异常的引用,是throw抛出来的异常的引用,这样我们就可以得到这个异常的对象,倒不如说我们是得到了这个异常对象的引用,因为在java里,通常我们也只能通过引用来操纵对象。

    相关文章

      网友评论

          本文标题:笔记——Java零碎知识摘录(一)

          本文链接:https://www.haomeiwen.com/subject/uixtuftx.html