当前位置: 安卓之星 -> Java开发 -> java学习教程之自学笔记总结

java学习教程之自学笔记总结

作者:网络 发表于: 2017-02-12 点击: 173 次

第一、java基础部分

1.1java程序执行过程

http://www.360doc.com/content/12/0630/08/6828497_221295060.shtml

1.2重载和重写

-重载同名函数参数个数和参数列表不同与返回值无关
-重写子类与父类具有相同的方法名返回类型和参数则父类方法被重写

1.3面向对象三大特性

1)继承
2)多态
3)封装

1.4面向对象和面向过程
1.5修饰符应用场景汇总

-权限修饰符
             public         protected          default         private
同一类中 ok              ok                    ok               ok
同一包中 ok              ok                    ok               x
子类中    ok              ok                    x                 x
不同包中 ok              x                      x                 x
-transient: 瞬态数据是特有的不是公用的还不想被序列化就用这个

1.6>>和>>>区别:>>最高位补1>>>最高位补0所谓无符号

1.7静态代码块、局部代码块构造代码块

局部代码块存在于方法内
静态代码块存在于类内方法外。随着类的加载而执行类加载一次静态代码块也只执行一次用于给类进行初始化
构造代码块存在于类内方法外用于对对象初始化创建几次对象就执行几次先于构造函数执行

1.8final关键字

-final修饰的类不可以被继承
-final修饰的方法不可以被覆盖
-final修饰的变量是一个常量
-内部类只能访问被final修饰的局部变量

1.9异常Exception体系下除了RuntimeException都需要被声明throws或捕获

try-catch

1.10 异常注意事项

1).子类在覆盖父类方法时父类的方法如果抛出了异常那么子类的方法只能抛出父类的异常或者异常的子类
2).如果父类抛出多个异常那么子类只能抛出父类异常的子集简而言之子类覆盖父类只能抛出父类的异常或者异常的子集如果父类的方法没有抛出异常那么子类覆盖时绝对不能抛

1.11线程

-创建线程两种方式
第一、继承Thread类覆盖run()方法将需要多线程的代码份封装到
run()方法当中
      创建Thread子类利用start()启动线程
第二、实现Runnable接口覆盖run()方法创建Thread类将实现
Runnable接口的子类作为构造函数的参数传递进去调用start()方法开启线程
-run()方法和start()方法区别run()任务封装start()开启线程
-两种创建线程的优缺点
-第一种有局限性java的单继承有应用的局限性
-第二种将线程的任务从线程子类中分离出来进行了单独的封装。
按照面向对象的思想将任务封装成对象。避免了java单继承的局限性
-开启多个线程在运行时会在栈里也开启多个执行路径所以有时我们
看到main方法出栈或者异常了其他线程却还在正常执行-深思多线程的安全问题
-线程同步
-解决问题解决多个线程操作共享数据的安全问题
-同步优点解决了线程安全问题
-同步缺点相对降低了效率因为同步外的线程都会判断同步锁
-同步前提必须有多个线程并使用同一个锁
-同步函数同步函数的锁是this
-同步函数和同步代码块区别
同步函数的锁是this同步代码块的锁是任意的对象
静态函数同步的锁是什么当前对象的字节码文件
-线程间通信等待唤醒机制
-wait():让线程处于冻结状态 被wait()的线程会被存储到线程
池中
-notify():唤醒线程池中的一个线程
-notifyAll():唤醒线程池中的所有线程
-JDK1.5新特性
-Lock接口出现替代了同步代码或者同步函数。将同步的隐士锁
操作变成现实锁操作。同时更为灵活。可以一个锁上加上多组监视器
lock()获取锁
unlock():释放锁并且通常需要定义在finally代码块中
-Condition接口出现替代了object中的wait notify   
notifyAll方法将这些监视器方法单独进行了封装变成Condition监视器对象
可以与任意锁进行组合
await()
signal()
signalAll()
-wait()和sleep()区别
第一、wait可以指定时间也可以不指定sleep必须指定时间
第二、在同步中对cpu的执行权和锁的处理不同
wait释放执行权释放锁
sleep:释放执行权不释放锁
-interrupt():可以使用interrupt()方法将线程从冻结状态强制恢复
到运行状态中来让线程具备cpu的执行资格。但是强制动作会发生
InterruptedException异常记得处理
-setDaemon():随着其他线程存在而存在无论处于什么状态都会随
着其他线程消失而消失
-join():执行此方法的线程释放执行权释放和执行资格优先其执行
1.12常见对象
-String
-String s=”abc”和String s1=new String(“abc”)区别
前者和后者“值”相等但是前者创建一个对象在字符串常量池
中后者是创建两个对象在堆内存中
-Stringbuffer和StringBuilder
-StringBuffer字符串缓冲区用于存储数据的容器
-特点
-1、长度可变初始容量为16
-2、可以存储不同类型数据
-3、最终要转成字符串进行使用
-StringBuilder
兼容StringBuffer
-StringBuffer和StringBuilder区别
StringBuffer线程同步保证安全StringBuilder线程不同步
不保证安全
1.13集合
-特点
1.用于存储对象的容器
2.集合长度是可变的
3.集合中不可以存储基本数据类型值
-迭代器Iterator:取出元素的方式即迭代器该对象必须依赖于容器
因为每一个容器的数据结构不同。所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言具体的实现不重要只要通过容器获取到该实现的迭代器
对象即可也就是iterator方法。Iterator接口就是对所有的Collection容器进
行元素取出的公共接口
-划分
|-Collection
|—List有序(存入和取出的顺序一致)元素都有索引(角标)
元素可以重复
|—Set元素不能重复
List
-遍历两种一种角标一种迭代器
-Iterator迭代器迭代集合时不允许并发修改否则引发
java.util.ConcurrentModificationException,迭代器的局限性。在在子接口中
有一个ListIterator可以实现在迭代器迭代过程中完成对元素的增删改查。注
意只有List集合具备该迭代功能
List:
|–Vector:内部是数组数据结构是同步的。增删查询都很慢
|–ArrayList内不是数组数据结构是不同步的。替代了Vector。查询速度快
|–LinkedList内部是链表数据结构是不同步的链表特点增删元素的速度很快Set元素不可重复无序(存取不一致)
|–HashSet内部数据结构是哈希表是不同步的无序的
-如何保证该集合的元素唯一性呢是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashcode值不相同那么不用判断equals方法就直接存储到哈希表中。
如果对象的hashCode值相同那么要再次判断对象的equals方法是否为true。如果为true视为相同元素不存如果为false那么视为不同元素就进行存储。
记住如果元素要存储到HashSet集合中必须覆盖hashCode方法和equals方法。一般情况下如果定义的类会产生很多对象比如人等通常都需要覆盖equalshashCode方法。建立对象判断是否相同的依据
|–LinkedHashSet相比较HashSet是有序的存取一致
|–TreeSet有序指的是按照元素自然顺序对元素进行排序是不同步的。
判断元素唯一性的方式就是根据比较方法compareTo的返
回结果是否是0是0就是相同元素不存跟hashCode和equals无关
TreeSet对元素排序的
方式一让元素自身具备比较功能元素需要实现Comparable接口覆盖conpareTo方法
方式二如果不想按照对象中具备的自然顺序进行排序或者如果对象中不具备自然顺序。(要么对象不具备比较性要么比较性不是我们想要的比如对象不是我们自定义的)则使用方式二让集合自身具备比

相关文章

相关文章

赶快留言冒泡

  • 评论 (0)
  • 引用通告 (0)
目前还没有任何评论.
目前还没有任何Trackbacks和Pingbacks.
吐个泡浮上去.