Java 常忽略知识点总结

程序(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 地址

时间: 2024-11-02 23:27:17

Java 常忽略知识点总结的相关文章

Java研发工程师知识点总结

Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(Sql.MySQL.Redis等) 六.算法与数据结构 七.计算机网络 八.操作系统(OS基础.Linux等) 九.其他 一.Java基础(语言.集合框架.OOP.设计模式等) 1. HashMap和Hashtable的区别 Hashtable是基于陈旧的Dicti

献给 2018 还在艰苦奋斗的 Java 程序员,Java 常见面试题及答案!

1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被编译成能被 Java 虚拟机执行的字节码文件. Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译. Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性. 2.JDK和JRE的区别是什么? JDK: java开发工具包,包含了JRE.编译器和其它工具(如:jav

JAVA常见面试题及解答-java开发

JAVA常见面试题及解答 Java的垃圾回收总结  浅谈Java中的内部类 1)transient和volatile是java关键字吗? 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多

Java入门学习知识点汇总--第一部分

Java入门重要知识点在这里总结一下,以方便日后复习,这部分内容主要有:变量和常量,常用的运算符,流程控制语句,数组,方法这些内容 一.变量和常量 1.Java关键字 先贴张图: 所有关键字区分大小写. 2.标识符 标识符就是用于给 Java 程序中变量.类.方法等命名的符号. 注意几条规则: 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头. 标识符不能是 Java 关键字和保留字,但可以包含关键字和保留字. 标识符是严格区分大小写

SEO中常忽略的事儿 你遇到了吗?

SEO中常忽略的事儿 你遇到了吗?SEO是一项艰巨而富有挑战的任务,你付出了很多努力,却不一定收到效果.为什么会这样呢?除了外部的因素与自身条件之外,还存在一些平日你不曾留意的细节影响所致. 只顾埋头苦干 却忘记抬头看路 文章原创.内链布局.外链建设--当站长们醒来的那一秒,他们的脑子里兴许就会蹦出这些词语.对于一个网站,这类看似的常规工作是非常重要的.但是,当我们埋头苦干的时候,却常常忘记抬头看路,错过了网站发展的光明大道.而我之前就出现过类似的情况. 当时我在负责网站的体育频道,虽然每天流量

【转载】JAVA常见面试题及解答(精华)

JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: class T { transient int a;  //不需要维持 int b;  //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存. volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变.在多线程程序中,有时两个或更多的线程共

Java网络编程知识点(1)

如何将一个String对象转换成InputStream对象? ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes()); 如何替换掉网络URL里面的参数值? String baseURL = "http://sixweather.3gpk.net/SixWeather.aspx?city=%s"; String cityName = "武汉"; String resultU

java常见面试题——java笔试题总结

注:本文转载自http://www.cnblogs.com/huajiezh/p/5790928.html,版权归其所有! Java常见面试题总结 一.Java基础 1.String类为什么是final的. 2.HashMap的源码,实现原理,底层结构. 3.说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4.描述一下ArrayList和LinkedList各自实现和区别 5.Java中的队列都有哪些,有什么区别. 6.反射中,Class.forName和cl

Java反射机制知识点

反射机制 本文章参照:魔乐java视频教程讲解,感谢 1.认识反射 反射之中包含一个"反"的概念,所以就必须先从"正"开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是"反"指的是通过对象找到类 package cn.test; class Person{};   // 定义一个Person类 public class ReflectDemo { public static void main(Str