java笔记本.docx
《java笔记本.docx》由会员分享,可在线阅读,更多相关《java笔记本.docx(11页珍藏版)》请在冰豆网上搜索。
java笔记本
jdk
1.jre(java运行环境)
2.java工具java的编译器:
javac.exejava解释执行器java.exe
3.java类库3600常用的类为150个
4.类变量:
类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量
5.如何定义一个类变量:
访问修饰符:
static数据类型变量名
6.类名.类变量名对象名.类变量名
7.静态区域块只被执行一次
8.类方法:
publicstaticintgetTotal(){
}
类变量原则上用类方法去访问
静态方法中不能访问非静态变量
this的必要性:
java虚拟机会给每个对象分配this代表当前对象
this是属于对象的
JAVA提供四种访问控制修饰符号控制方法和变量的访问权限:
1.公开级别:
用Public修饰,对外公开
2.受保护级别:
用protected修饰,对子类和同一个包中的类公开
3.默认级别:
没有修饰符号,向同一个包的类公开
4.私有级别:
只有类本身可以方法,不对外公开
位运算:
1.二进制最高位是符号位:
0是正数1是负数
2.正数的原码,反码,补码都一样
3.负数的反码=它的原码符号位不变,其他位取反
4.负数的补码=它的反码+1
5.0的反码,补码都是0
6.java没有无符号的数,java都是有符号数
7.在计算机运算的时候,都是以补码的方式进行运算的
按位与&:
两位全为1,结果为1
按位或|:
两位有一个为1,结果为1
按位异或^:
两位一个为0,一个为1,结果为1
按位取反~:
0110
java提供3个移位运算符
>>算术右移:
低位溢出,符号位不变,并用符号位补溢出的高位
<<算术左移:
符号位不变,补0
>>>逻辑右移:
运算规则是:
低位溢出,高位补0
集合:
1.HashMap和HashTable
①HashTable是基于Dictiontary类的,HashMap是Java引进Map接口的
②同步性:
HashTable是同步的。
这个类中的一些方法保证了HashTable中的对象是线程安全的。
而HashMap中的对象是线程不安全的,因为同步的要求会影响执行效率,所以你不需要线程安全的时候可以使用HashMap.
③值:
HashMap可以让你将空值作为一个表的条目的key或value,但是HashTable的值不能为null
ArrayList和Vector的区别
ArrayList与Vector都是Java的集合类,都可以用来存放java对象,这是他们的相同点
区别:
一:
同步性
vector是同步的,这个类中的一些方法保证了Vector中的对象是线程安全的。
而ArrayList是异步的,因此ArrayList中的对象并不是线程安全的。
因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合,那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销
二:
数据增长
从内部实现机制来讲ArrayList和Vector都是使用数组来控制集合中的对象,当你向这两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的诚笃它们都需要扩展内部数组的长度。
Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%
经验总结:
1.如果要求线程安全,使用Vector,HashTable
3.如果要求键值对,则使用HashMap,HashTable
4.如果数据量很大,又要线程安全考虑Vector
JAVA类加载器原理(双亲委派加载器)
\
方法覆盖:
1.子类的方法的返回类型,参数,方法名称,要和父类的方法返回类型,参数,方法名称一样
2.子类方法不能缩小父类方法的访问权限
多态:
指通过指向父类的指针,来调用在不同子类实现的方法
抽象类:
abstract修饰的一个类,这个类就叫抽象类
abstract修饰的一个方法,这个方法叫抽象方法
抽象方法不能被实例化
抽象类不一定要有抽象方法
类中如果包含抽象方法,则该类一定要是抽象类
抽象方法不能有主体
图形用户界面(gui)
用什么开发GUI
sun开发
awt-没有解决跨平台问题
swing-继承了awt并解决了跨平台问题
IBM认为swing比较消耗内存,创建了一个新的GUI库这是SWT,同时IBM为了方便开发SWT程序,在SWT基础上又创建了一个更易用,功能强大的图形包”JFace”;
Eclipse由IBM的附属公司oti开发的
IDE集成开发环境,比如jcreator,vs2005;netBean,Borland–Jbuilder,Jcreator
Text
Menus
Widget(小控件)
Top-LevelWindows
Sub-Windows
布局管理器:
组件在容器中的位置和大小是有布局管理器来决定的,所有容器都会使用一个布局管理器,通过它来自动进行组件布局管理
种类:
五种
流式布局管理器,边界布局管理器,网格布局管理器,网格包布局管理器,卡片布局管理器
1.边界布局
边界布局将容器简单划分为东西南北中五个区域,中间区域最大
2.流式布局
3.网格布局
几个常用组件
面板组件(JPanel)
JPanel:
面板组件,非顶层容器
一个界面只可以有一个JFrame窗体组件,但可以有多个Jpanel面板组件,而Jpanel上也可以使用FlowLayOut,BorderLayout,GridLayout等各种布局管理器,这样组合使用达到较为复杂的布局结果
文本框JTextField
密码框JpasswordField
标签JLable
复选框组件JCheckBox
单选框组件JRadioButton
下拉组件(JComboBox)
列表框组件JList
滚动窗格组件JScrollpage
同一组单选按钮必须先创建ButtonGroup,然后把单选框组件放入到ButtonGroup中
拆分窗格组件:
JSplitPane
多行文本框
JTextArea
菜单组件
JMenuBar菜单条组件树干
JMenu菜单组件树枝
JMenuItem菜单项组件树叶
二级菜单
JMenu里面可以嵌套JMenu
Java绘图技术原理
Component类提供了两个和绘图相关最重要的方法
1.pain(Graphicsg)绘制组件的外观
2.repaint()刷新组件的外观
当组件第一次在屏幕显示的时候,程序会自动的调用Paint()方法来绘制组件
在以下情况下paint()将会调用
1.窗口最小化,再最大化
2.窗口的大小发生了变化
3.repaint函数被调用
Graphics类
常用方法
1.画直线g.drawLine(10,10,40,40);
2.画矩形边框drawRect
3.画填充矩形fillRect
4.画图片drawimage
Java事件处理机制
1.java事件处理是采用”委派事件模型”,所谓委派事件模型是指当事件发生时,产生事件的对象(即事件源),会把此信息传递给事件的监听者,处理的一种方式,而这里所说的”信息”传递给事件的监听者处理的一种方式,而这里所说的信息实际上就是java,awt,event事件类库某个类所创建的对象,我们暂时把它称为事件对象
事件源:
是一个产生(或触发)事件的对象,当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件,如果某个组件希望得到事件源产生的事件,就需要在这个事件源上注册
事件:
就是承载事件源状态改变时的信息对象。
或者说事件就是事件源向事件监听对象传输事件源状态的信息的载体
常见事件
ActionEvent
AdjustmentEventComponentEvent
ContainEvent
FocusEvent
ItemEvent
KeyEvent
MouserEvent
TextEvent
WindowEvent
3.事件监听接口
事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口
事件编程步骤
1.编写事件处理类
2.根据需求给事件处理类实现监听接口
3.在事件处理类中重写其事件处理的函数
4.在事件源类中指定该事件的监听器是谁,即注册监听
实现事件处理机制
1.实现相应的接口【keyListener,MouseListener,ActionListener,WindowListener】
2. 把接口的处理方法根据需要重新编写(Override)
3.把事件源注册监听
4.事件传到是靠事件对象ActionEvent
线程
进程:
运行中的应用程序,每个进程都有自己独立的地址空间(内存空间);
线程:
是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可以与同属一个进程的其它线程共享进程所拥有的全部资源。
一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行,线程有就绪,阻塞,和运行三种基本状态
线程的状态:
1.新建状态
2.就绪状态(可运行状态)
3.运行状态
4.阻塞状态
5.死亡状态
只要应用程序涉及到并发,就离不开多线程编程
线程使用:
在java中一个类要当做线程来使用有两种方法
1.继承Thread类,并重写run函数
2.实现Runnable接口,并重写run函数
线程对象只能启动一个线程,即只能启动一次
文件流
如何判断是输入流,还是输出流
以内存为参照物,如果数据向内存流动,就是输入流,如果内存向文件流动,就是输出流
java文件流两种流
1.字节流:
可以用于读写二进制文件及任何类型的文件byte
2.字符流:
可以用于读写文本文件
字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
OSI模型七层
应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
TCP/IP模型四层
应用层,传输层,网络层,链路层
ip地址
概述:
每个Internet上的主机和路由器都有一个IP地址,它包括网络号和主机号,所有ip地址都是32位,ip地址按照国际标准划分为a,b,c,d,e五种类型
a类地址1~127
b类地址128~191
c类地址192~223
d类地址224~239
e类地址240~247
111111111111111111局域网广播地址
网络号1111111111111111子网的广播
127任意值(去除全零和全1)回路地址
端口:
有65536
0是保留端口
1-1024是固定端口,又叫有名端口,即被某些程序固定使用,一般程序员不使用
22:
SSH远程登录协议23:
telnet使用21:
ftp25:
smtp80:
iis使用
7:
echo服务
1025-65535是动态端口
这些端口,程序员可以使用
端口注意事项
1.在计算机要尽可能的少开端口
2.一个端口只能被一个程序监听
3.如果使用netstat–an可以查看本机有哪些端口在监听
4.可以使用netstat–anb来查看监听端口的pid,在结合任务管理器关闭不安全的端口
Url统一资源定位符
即网络地址可以是本地磁盘,一台计算机,一个网站
:
8080/index.html
1.协议
2.ip地址
3.端口号
4.资源名称
单工:
如果甲可以向乙发送数据,但是乙不能向甲发送数据,这样的通信就是单工通信
半双工:
全双工:
对象流
常用方法:
得到当前工程根目录
Stringpath=System.getProperty("user.dir");
在Java1.6中可以使用自带编译器
JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();
java中包的类型
1.jar
2.war
3.ear
jar,war,ear都是标准的zip格式,完全可以采用winzip,winrar来打包
分布式通信的基本原理:
客户端----STUB(存根)-----协议(soap/rmi-iiop/iiop)------Skeleton(骨架)---远程对象
SOAP(简单对象访问协议http+xml)
CORBA---快
webservies---慢
WSDL(WebServcies描述语言中立语言)
UDDI(发现和整合服务)
web服务主要是解决异构系统的通信
其实webService主要是解决异构系统通信
其实WebService就是基于XML的数据交换
WebService特征
1.通过标准的soap通信,一般走http协议
2.能跨平台调用
3.通信格式是xml,而不是二进制(EJB,CORBA);
27.目前主流的分布式技术
CORBA,EJB,DCOM,WEBSERVICES,REST等
28.EJB(企业应用集成),SOA(面向服务架构),IDL(接口定义语言
29.SOAP协议request
POST/axis/MyMath.jws?
JVM内存配置
loadRunner(压力测试),jmeter(压力测试),Jmap(内存分析),Jprobe(内存分析,多线程分析,代码覆盖率)
内存溢出:
outofmemory,
a)如果不存在内存泄露,java.lang.OutOfMemory解决方案是加大JVM内存,默认JVM最大内存为64M
b)独立的JAVA应用程序,可以采用javaServer–Xms512m-Xmx1024m,加大JVM内存
c)Tomcat 中如何设置在catalina.bat中键入:
SetCATALINA_OPTS=-Xms512m–Xmx1024m
在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中
Class类:
代表一个类
Field类:
代表类的成员变量(成员变量也称为类的属性)
Method类:
代表类的方法
Constructor类:
代表类的构造方法
Array类:
提供了动态创建数组,以及访问数组的元素的静态方法
ReflectTester类有一个copy(Objectobject)方法,这个方法能够创建一个和参数object同样类型的对象,然后把object对象中的所有属性拷贝到新建的对象中,并将它返回这个例子只能复制简单的JavaBean,假定JavaBean的每个属性都有public类型的get,set方法