Java 常忽略知识点总结

时间:2023-02-26 18:36:35
程序(program):是为了完成特定任务、用某种语言编写的一组指令的集合。即指的一段静态的
代码,静态对象。
进程(process):是程序的一次执行过程,或是正在运行的一个程序。
动态过程:有他自身的产生、存在和消亡的过程。
如:运行的QQ、运行的MP3的播放器
程序是静态的,进程是动态的。
线程:进程可进一步细化为线程,是一个程序内部的一条执行路径。
若一个程序可同一时间执行多个线程,就是支持多线程的。

多线程程序的优点:
1.提高应用程序的响应,对图形化界面更有意义,
可增强用户的体验。
2.提高计算机系统CPU的利用率
3.改善程序结构,将既长有复杂的进程分为多个
线程,独立运行,利于理解和修改。
java线程的分类:守护线程和用户线程
1.他们在几乎每个方面都是相同的,唯一的
区别就是JVM何时离开。
2.守护线程是用来服务用户线程的,通过sart()
方法前调用thread.setDaemon(true)可以把
一个用户线程变为一个守护线程。
3.Java垃圾回收就是一个典型的守护线程
4.若JVM中都是守护线程,当前JVM将退出。

JDK中用Thread.State枚举表示线程的几种状态
要想实现多线程,必须在主线程中创建新的线程对象。
Java语言使用的Thread类及其子类的对象来表示线程,
在它的一个完整的生命周期中通常要经历如下的五种状态:
1:新建:当一个Thread类或其子类的对象被
声明并创建时,新生的线程对象处于新建的状态。
2:就绪:处于新建状态的线程被start()后,将
进入线程队列等待CPU时间片,此时它已具备了运行的条件。
3:运行:当就绪的线程被调度并获得处理器资源时,便进入
运行状态,run()方法定义了线程的操作和功能。
4:阻塞:在某种特殊的情况下,被人为挂起或执行输入输出操作时,
让出CPU并临时中止自己的执行,进入阻塞状态。
5:死亡:线程完成它的全部工作或线程被提前强制性地中止.

释放锁的操作:
1.当前线程的同步方法、同步代码块执行结束
2.当前线程在同步代码块、同步方法中遇到了break、
return终止了代码块、该方法的继续执行。
3.当前线程在同步代码块、同步方法中出现了未处理
的Error或Exception,导致异常结束
4.当前线程在同步代码块、同步方法中执行
了线程对象的wait()方法,当前线程暂停,并释放锁。

不会释放锁的操作
线程执行同步代码块或同步方法时,程序调用Thread.sleep()、
Thread.yield()方法暂停当前线程的执行。

线程执行同步代码块时,其他线程调用了该线程的suspend()方法
将该线程挂起,该线程不会释放锁(同步监视器)
应尽量避免使用suspend()和resume()来控制线程

死锁:
不同的线程分别占用对方所需要的同步资源不放弃,都在等待对方
放弃自己需要的同步资源,就形成了线程的死锁。
解决方法:
专门的算法、原则
尽量减少同步资源的定义
线程的通讯:
Object 的方法:
wait();
令当前线程挂起并放弃CPU、同步资源、使别的线程可访问并修改
共享资源,而当前线程排队等候再次对资源访问。
notify();
唤醒正在排队等待的同步资源的线程中优先级最高者结束等待。
notifyAll();
唤醒正在排队等待资源的所有线程结束等待。
java.lang.Object提供的这三个方法只有在synchronized方法或
synchoronized代码块中才能使用,否则会lang的异常。
String 是一个final类,代表不可变的字符序列
字符串是不可变的。一个字符串对象一旦被配置,
其内容是不可变的。底层使用char[]数组存放的。

String 类:不可变的字符序列,(String str="sdf156";str+="javaEE" 重新创建了一个str所以占)
StringBuffer代表可变的字符序列,可以对字符串内容进行
增删。
很多方法与String相同,但是StringBuffer是可变长度的。
StringBuffer是一个容器
String 是一个类
String 与StringBuffer的转换
1.new StringBuffer(String str)
StringBuffer与String的转换
StringBuffer的toStrong()方法就可以转为String
Date getTime 返回当前日期对应的long型的值

java Reflection
反射是被视为动态语言的关键,反射机制允许程序
在执行期借助与Reflection API取得任何类的内部信息,
并能直接操作任意对象的内部属性及方法。
 Class:是反射的源头
  我们创建一个类,通过编译(javac.exe)生成对应的.class文件,之后我们
  使用java.exe(JVM的类加载器完成的)加载此.class文件,此.class文件
  加载到内存以后,就是一个运行时类,存在在缓存区。那么这个运行时类本身就是
一个Class的实例。
* 1.每一个运行时类只加载一次。
2.有了Class的实例以后,我们才可以进行如下的操作:
a.创建对应的运行时类的对象
b.获取对应的运行时类的完整结构,(属性、方法、构造器、内部类、父类
  所在的包、异常、注解)
  c.调用对应的运行时类的指定的结构(属性、方法、构造器)
d.反射的应用,动态代理
ClassLoader
类加载器是用来把类(class)装载进内存的。JVM规范定义了两种
类型的类加载器,启动类加载器(bootstrap)和用户自定义加载器
(user-defined class loader)。JVM在运行时会产生3个
类的加载器组成的初始化加载器层次结构。
引导类加载器,扩展类加载器、系统类加载器

网络基础:
OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广。
TCP/IP参考模型(TCP/IP协议):实际上的国际标准

应用层、
传输层、
TCP,
使用TCP协议前,须先建立TCP连接,形成传输数据通道
传输前,采用“三次握手”方式,是可靠的
TCP协议进行通信的两个应用进程:客户端、服务器端
在连接中可进行大数据量的传输
传输完毕,需释放已建立的连接,效率低
UDP
将数据、源、目的封装成数据包,不需要建立连接
每个数据包的大小限制在64k内
因无需连接,故是不可靠
发送数据结束时无需释放资源,速度快
网络层、IP
物理+数据链路层
端口号:标识计算机上运行的进程0-65535



端口号和IP地址的组合得出一个网络的套接字
套接字(Socket)开发网络应用程序早已被广泛的采用,
以至于成为事实上的标准。
网络通信其实就是socket间的通信
Socket允许程序把网络连接当成一个流,数据在两个
Socket间通过IO传输
一般发起通信的应用程序属客户端,等待通信请求的为服务端
B/S浏览器/服务器
C/S客户端/服务器

标示符:由字母、数字、下划线或$开头的
Java对各种变量、方法和类等要素命名时使用的字节符列称为标示符。
整形默认为:int
定义long型,值的末尾加“L”或“l”
浮点型默认的为double
float f1 = 12.3F;
Unicode:一种编码:将世界上所有的符号都纳入其中,每一个符号都给予独一无二
的编码,使用Unicode没有乱码的问题。
二进制的最高位为符号位0为正数、1为负数
原码、
反码、除了符号位取反
补码、反码+1  
不管是正数还是负数底层的存储方式是补码
取模数:结果的符号取决于被模数(前面的那个)
instanceof 检查是否是类的对象 "hello" instance String 
^逻辑异或 只要不同就为ture
&逻辑与 && 短路与 
&无论左端是true还是false右端都要运算
&& 左端为false时右端不再判断
|逻辑或与||短路或 区别
|当左端为true时,右端照样做运算
||,当左端为true,右端不再进行运算
位运算符:直接对二进制进行运算
<<左移 3<<2=12->3*2*2=12
>>右移 3>>1=1->3/2=1(最高位是几就拿几补)
>>>无符号右移3>>>1=1->3/2=1(最高位不管你是1还是0都拿0补)
&与运算 6&3=2  二进制位都为1为1
|或运算6|3=7  二进制位有一个为1为1
^异或运算6^3=5  二进制位不同时为1
~反码~6=-7   把所有的二进制位0变为1,1变为0
switch变量可以有的数据类型?char byte short int String 枚举(jdk1.7)
case 条件:其中条件只能是值,不能是取值范围
最简单无限循环for(;;)while(true)
continue:使用在循环结构中,表示结束当次循环
数组有、
静态初始化:初始化数组的与给数组赋值同时进行。
动态初始化:初始化数组与给数组元素赋值分开进行。
char默认的值为空格
应用类型的变量构成的数组而言,默认初始化为null

栈:stack 存放局部变量对象的引用
堆:heap new出来的东西
方法区:里面有常量池
静态域:
数组:栈地址指向的是堆空间的首地址
数组一旦初始化,其长度是不可变的

二维数组:a[m][n]m行n列
二维数组的长度:a.length 输出的m的个数行数
a[0].length 第0行中的长度
1.数组下表越界异常ArryIndexOutOfBoundsExeception
2.空指针的异常 NullPointerException
插入排序:
直接插入排序、折半插入排序、Shell排序
交换排序:
冒泡排序、快速排序(分区交换排序)
选择排序
简单选择排序、堆排序
归并排序
技术排序
成员变量:在堆空间中
new 出来的东西(包含成员变量)在堆空间中

局部变量放在栈中
final标记的类不能被继承。
final标记的方法不能被子类重写

final标记的变量即为常量。
static:
1.由类创建的所有的对象,都公用一个属性。
2.当其中一个对象对此属性修改,会导致其他对象对此属性的调用。
3.随着类的加载而加载的,而且独有一份
Collection接口:
1.iterator迭代器接口
2.Set接口
HashSet、LinkedHashSet、TreeSet
3.list接口
ArrayList LinkedList Vector
4.Map接口
HashMap TreeMap Hashtable
Collections工具类
set:元素无序、不可重复的集合。
List:元素有序,可重复的集合。
Map:具有映射关系“key-value对”的集合。
本文来自CSDN用户    Nothing http://blog.csdn.net/u011687186/article/details/51233127 地址