1.String是引用类型.
2.char, short, byte在进行运算的时候会自动转换成int类型数据.,
3.数据A 异或同一个数两次,得到的还是A
4.java的for循环,可以在前面加一个标识.out:for(int i=0; i<10; i++),后面的break与continue可以后跟上标识符.直接作用于标识for的操作.
5.构造代码块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
6.在类中显示调用其他参数的构造函数时,方式为this(参数),要放在函数的第一条语句中;
7.在java中,当JVM虚拟机加载.class文件,首先检查里面的函数,看是否有main函数,其次查看里面的静态成员,静态成员是先于对象创建(也许没创建).静态成员都是可以直接用类来调用的.与对象没有关系.所有对象都共享同一个静态成员
8.super一般代码父类的引用.可以访问父类的成员,也可以调用父类构造函数.
9.final关键字的用法:
1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的。
2. fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。(可以通过传参的方式改变, 但是新函数的变量与原来的变量不一样,按C++的话来说.指向的地址一样.但变量本身的内存地址不一样) 3. final关键字修饰一个函数的时候,该函数不能被重写。 4. final关键字修饰一个类的时候,该类不能被继承。10.接口要注意的事项 :
1. 接口是一个特殊的类。 2. 接口的成员变量默认的修饰符为: public static final 。那么也就是说接口中的成员变量都是常量。 3. 接口中 的方法都是抽象的方法,默认的修饰符为: public abstract。 4. 接口不能创建对象。 5. 接口是没有构造方法的。 6. 接口是给类去实现使用的,非抽象类实现一个接口的时候,必须要把接口中所有方法全部实现。
11多态要注意的细节:
1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。 3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。4. 多态情况下,不能访问子类特有的成员。
总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。
12.捕获异常,在JAVA中,如果没有异常处理,JVM虚拟机会自动创建一个异常类对象,并打印出异常信息,而我们所要做的,就是用cry-catch来捕获这个异常对象,捕获了之后,JVM将不再打印信息,由我们程序员自己处理
可以直接捕获Exception异常,相当于Exception e = new NullPointerException , 这样是成立的,异常将不再捕获
捕获处理要注意的细节:
1. 如果try块中代码出了异常经过了处理之后,那么try-catch块外面的代码可以正常执行。 2. 如果try块中出了异常的代码,那么在try块中出现异常代码后面的代码是不会执行了。 3. 一个try块后面是可以跟有多个catch块的,也就是一个try块可以捕获多种异常的类型。 4. 一个try块可以捕获多种异常的类型,但是捕获的异常类型必须从小到大进行捕获,否则编译报错。
13.抛出处理要注意的细节:
0.当在子类重写父类方法时,子类所抛出的异常必须要小于等于父类,父类没有抛出,那么子类就不能抛出(子类必须比父类善良)
1. 如果一个方法的内部抛出了一个异常 对象,那么必须要在方法上声明抛出。 2. 如果调用了一个声明抛出异常 的方法,那么调用者必须要处理异常。 3. 如果一个方法内部抛出了一个异常对象,那么throw语句后面的代码都不会再执行了(一个方法遇到了throw关键字,该方法也会马上停止执行的)。 4. 在一种情况下,只能抛出一种类型异常对象。14.throw 与throws两个关键字:
1. throw关键字是用于方法内部的,throws是用于方法声声明上的。 2. throw关键字是用于方法内部抛出一个异常对象的,throws关键字是用于在方法声明上声明抛出异常类型的。 3. throw关键字后面只能有一个异常对象,throws后面一次可以声明抛出多种类型的 异常。15.System.gc();建议马上启动JVM的垃圾回收器
16.多线程 继续一个Thread类,重写run方法,然后调用对象的start方法
17.线程锁,任何一个对象都可以做为线程锁,是因为其内部都有一个状态state,1为开,0为关,当使用synchronized(对象)时,JVM会设置被包含代码块的state的值.从而达到同部
1. 任意的一个对象都可以做为锁对象。
2. 在同步代码块中调用了sleep方法并不是释放锁对象的。 3. 只有真正存在线程安全问题的时候才使用同步代码块,否则会降低效率的。 4. 多线程操作的锁 对象必须 是唯一共享 的。否则无效。
18.同步函数 : 同步函数就是使用synchronized修饰一个函数。
同步函数要注意的事项 :
1. 如果是一个非静态的同步函数的锁 对象是this对象,如果是静态的同步函数的锁 对象是当前函数所属的类的字节码文件(class对象)。 2. 同步函数的锁对象是固定的,不能由你来指定 的。19自定义线程的创建方式
方式二:
1. 自定义一个类实现Runnable接口。 2. 实现Runnable接口 的run方法,把自定义线程的任务定义在run方法上。 3. 创建Runnable实现类对象。 4. 创建Thread类 的对象,并且把Runnable实现类的对象作为实参传递。 5. 调用Thread对象 的start方法开启一个线程。20.wait与notify方法要注意的事项:
1. wait方法与notify方法是属于Object对象 的。 2. wait方法与notify方法必须要在同步代码块或者是同步函数中才能 使用。 3. wait方法与notify方法必需要由锁对象调用。21.线程的停止:
1. 停止一个线程 我们一般都会通过一个变量去控制的。 2. 如果需要停止一个处于等待状态下的线程,那么我们需要通过变量配合notify方法或者interrupt()来使用。22.join()
1.一个线程如果执行join语句,那么就有新的线程加入,执行该语句的线程必须要让步给新加入的线程先完成任务,然后才能继续执行。
23集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。-------| Collection 单例集合的跟接口。
----------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复。 ----------| Set 如果是实现了Set接口的集合类,具备特点: 无序,不可重复。
24ListIterator特有的方法:
添加:
hasPrevious() 判断是否存在上一个元素。 previous() 当前指针先向上移动一个单位,然后再取出当前指针指向的元素。 next(); 先取出当前指针指向的元素,然后指针向下移动一个单位。 add(E e) 把当前有元素插入到当前指针指向的位置上。 set(E e) 替换迭代器最后一次返回的元素。25迭代器的方法:
hasNext() 问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。
next() 获取元素... remove() 移除迭代器最后一次返回 的元素。
26.HashSet添加元素的原理:
往HashSet添加元素的时候,首先HashSet会调用元素的hashCOde方法得到元素的哈希码值,然后会经过一系列运算 就可以算出该元素在哈希表中的存储位置/ 情况1:如果算出该元素的位置目前没有任何元素存储,那么该元素可以直接存储 情况2: 如果算出该元素的位置目前已经存有其他的元素,那么还会调用元素的equals方法与该位置的元素再比较一次。 如果equals方法返回的是false,那么该元素允许存储,如果euqlas方法返回的是true,那么该元素被视为重复元素,不允许存储。
27.treeSet要注意的事项:
1. 往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储。 2. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,把元素 的比较规则定义在compareTo(T o)方法上。 3. 如果比较元素的时候,compareTo方法返回 的是0,那么该元素就被视为重复元素,不允许添加.(注意:TreeSet与HashCode、equals方法是没有任何关系。) 4. 往TreeSet添加元素的时候, 如果元素本身没有具备自然顺序 的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个 比较器。 5. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了Comparable接口, 在创建TreeSet对象的时候也传入了比较器 那么是以比较器的比较规则优先使用。
28.泛型类要注意的事项:
1. 在类上自定义泛型的具体数据类型是在使用该类的时候创建对象时候确定的。 2. 如果一个类在类上已经声明了自定义泛型,如果使用该类创建对象 的时候没有指定 泛型的具体数据类型,那么默认为Object类型 3.在类上自定义泛型不能作用于静态的方法,如果静态的方法需要使用自定义泛型,那么需要在方法上自己声明使用。29.HashSet添加元素的原理:
往HashSet添加元素的时候,首先HashSet会调用元素的hashCOde方法得到元素的哈希码值,然后会经过一系列运算 就可以算出该元素在哈希表中的存储位置/ 情况1:如果算出该元素的位置目前没有任何元素存储,那么该元素可以直接存储 情况2: 如果算出该元素的位置目前已经存有其他的元素,那么还会调用元素的equals方法与该位置的元素再比较一次。 如果equals方法返回的是false,那么该元素允许存储,如果euqlas方法返回的是true,那么该元素被视为重复元素,不允许存储。------------------| TreeSet 底层是使用了红黑树(二叉树)数据结构实现的, 特点:会对元素进行排序存储。30.TreeSet要注意的事项:
1. 往TreeSet添加元素的时候,如果元素本身具备自然顺序的特性,那么会根据元素自然顺序的特性进行排序存储。 2. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么元素所属的类必须要实现Comparable接口,把元素的比较规则定义 在CompareTo方法上。 3. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而且元素所属的类没有实现COmparable接口,那么必须要在创建 TreeSet对象的时候传入比较器。 4. 如果比较的方法(CompareTo 或者Compare )返回的是0的时候,那么该元素就被视为重复元素,不允许添加。
31.枚举类的定义格式:
enum 类名{ //枚举值 }枚举要注意的细节: 1. 枚举类也是一个特殊的类。 2. 枚举值默认的修饰符是public static final。 3. 枚举值就是是枚举值所属的类的类型, 然后枚举值是指向了本类的对象的。 4. 枚举类的构造方法默认的修饰符是private的。 5. 枚举类可以定义自己的成员变量与成员函数。 6. 枚举类可以自定义构造函数,但是构造函数的修饰符必须是private。 7. 枚举类可以存在抽象 的方法,但是枚举值必须要实现抽象 的方法。 8. 枚举值必须要位置枚举类 的第一个语句。