java基础复习Word文件下载.docx
- 文档编号:6915667
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:38
- 大小:41.04KB
java基础复习Word文件下载.docx
《java基础复习Word文件下载.docx》由会员分享,可在线阅读,更多相关《java基础复习Word文件下载.docx(38页珍藏版)》请在冰点文库上搜索。
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。
因此在运行时,Java源程序需要通过编译器编译成为.class文件。
Java虚拟机的建立需要针对不同的软硬件平台来实现,既要考虑处理器的型号,也要考虑操作系统的种类。
由此在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上,在UNIX、Linux、Windows和部分实时操作系统上都可实现Java虚拟机。
2.无用内存自动回收机制
在程序的执行过程中,部分内存在使用过后就处于废弃状态,如果不及时进行回收,很有可能会导致内存泄漏,进而引发系统崩溃。
在C++语言中是由程序员进行内存回收的,程序员需要在编写程序时把不再使用的对象内存释放掉,这种人为管理内存释放的方法往往由于程序员的疏忽而致使内存无法回收,同时也增加了程序员的工作量。
而在Java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并自动进行回收,避免了内存的泄露,也减轻了程序员的工作量。
3.代码安全性检查机制
安全和方便总是相对矛盾的。
Java编程语言的出现使得客户端计算机可以方便地从网络上上传或下载Java程序到本地计算机上运行,但是如何保证该Java程序不携带病毒或者没有其他危险目的呢?
为了确保Java程序执行的安全性,Java语言通过Applet程序来控制非法程序的安全性,也就是有了它才确保Java语言的生存。
Java字节码的执行需要经过以下3个步骤:
(1)由类装载器(classloader)负责把类文件(.class文件)加载到Java虚拟机中。
在此过程需要检验该类文件是否符合类文件规范。
(2)字节码校验器(bytecodeverifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。
(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。
注意:
Java虚拟机采用“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间以外的内存。
如果是Applet程序,还不允许访问客户端机器的文件系统。
Java的运行环境
无论哪种语言都需要有它特定的运行环境,也就是平台。
Java语言同样不例外。
但是如何理解Java程序与硬件环境无关呢?
几乎所有的语言都需要通过编译或者解释才可以被计算机执行,但是Java有一点不同,它同时需要这两个过程。
其实,也正是因为这个原因才使Java这种语言具有了平台无关性。
当完成一个Java源程序后,首先,通过Java翻译程序将它编译成一种叫做字节码的中间代码,然后再由Java平台的解释器将它转换成为机器语言来执行,这一平台的核心就是JVM。
Java的编译过程与其他的语言不同。
像C++这样的语言,在编译时它是与计算机的硬件平台信息密不可分的。
编译程序通过查表将所有指令的操作数和操作码等转换成内存的偏移量,即程序运行时的内存分配方式,目的是保证程序正常运行。
而Java却是将指令转换成为一种.class的文件,这种文件不包含硬件的信息,需要执行时只要经过安装有JVM的机器进行解释,创建内存分配后再通过查表来确定一条指令所在的地址。
这样就有效地保证了Java的可移植性和安全性。
Java平台具有这样的特性和它的结构有关。
通常一个程序运行的平台是一个硬件或者软件运行的环境,目前比较流行的是WindowsXP、Linux、Solaris和MacOS。
Java的平台不太一样,它由两个部分组成,即JVM和应用程序设计接口。
1.JVM
JVM是Java平台的核心,为了让编译产生的字节码能更好地解释与执行,因此把JVM分成了6个部分:
JVM解释器、指令系统、寄存器、栈、存储区和碎片回收区。
◆JVM解释器:
即这个虚拟机处理字段码的CPU。
◆JVM指令系统:
该系统与计算机很相似,一条指令由操作码和操作数两部分组成。
操作码为8位二进制数,主要是为了说明一条指令的功能,操作数可以根据需要而定,JVM有多达256种不同的操作指令。
◆寄存器:
JVM有自己的虚拟寄存器,这样就可以快速地与JVM的解释器进行数据交换。
为了功能的需要,JVM设置了4个常用的32位寄存器:
pc(程序计数器)、optop(操作数栈顶指针)、frame(当前执行环境指针)和vars(指向当前执行环境中第一个局部变量的指针)。
◆JVM栈:
指令执行时数据和信息存储的场所和控制中心,它提供给JVM解释器运算所需要的信息。
◆存储区:
JVM存储区用于存储编译过后的字节码等信息。
◆碎片回收区:
JVM碎片回收是指将使用过的Java类的具体实例从内存进行回收,这就使得开发人员免去了自己编程控制内存的麻烦和危险。
随着JVM的不断升级,其碎片回收的技术和算法也更加合理。
JVM1.4.1版后产生了一种叫分代收集技术,简单来说就是利用对象在程序中生存的时间划分成代,以此为标准进行碎片回收。
2.Java应用程序设计接口
JavaApplicationProgrammingInterface简称JavaAPI,其中文名为Java应用程序设计接口。
它是一个软件集合,其中有许多开发时所需要的控件,可以用它来辅助开发。
JavaAPI和JVM构成了Java运行的基本环境,这两种软件整合在一起处于计算机之上,通过这两种软件,Java平台把一个Java应用程序从硬件系统分离开,从而很好地保证了程序的独立性。
为了更好地适应开发的需要,Java的设计者们提供了3种版本的Java平台:
Java2MicroEdition(J2ME)、Java2StandardEdition(J2SE)和Java2EnterpriseEdition(J2EE),每一种版本都提供了丰富的开发工具以适应不同的开发需要。
3什么是JVM
Java虚拟机
Java语言的一个非常重要的特点就是与平台的无关性。
而使用Java虚拟机是实现这一特点的关键。
4java命名规范
1,包的命名
java包的名字都是由小写单词组成。
一般采用域名的反写。
如:
com.edu.flower.demo
2,类的命名
(1)类名必须由大写字母开头,一个单词中的其他字母均为小写字母
(2)若多单词组成。
则建议每个单词的首字母均大写,如TestDemo
(3)若类名中包含单词缩写,则建议将这个词的每个字母均为大写,如XMLDemotional
(4)类名尽量用名词
3,方法的命名
(1)方法的名字第一个单词应以小写字母开头,后面的单词首字母要大写
(2)方法名字尽量用动词,
如getPicture().
4,常量的命名
(1)常量的名字应该都是用大写字母。
并且指出该常量完整含义。
CUREE
(2)如果一个常量名称由多个单词组成,则建议用下划线分割这些单词
MIN_VALUE
5,参数的命名
和方法的命名规范相同,参数的命名尽可能的明确
6,javadoc注释
用来记录代码中的API的。
是一种多行注释,以/**开头,以*/结束
注释可以包含一些HTML标记符号和专门的关键词
javadoc注释的好处是编写的注释可以被自动转化为在线文档,省去了单独编写程序文档的麻烦
如
/**
*
*@author
*/
在每个程序的最开始部分,一般都用javadoc注释进行程序的总体描述以及版权信息
在主程序中可以为每个类,接口,方法,变量添加javadoc注释
开头概括该类接口方法变量所完成的功能,单独占据一行
后面可以可以详细描述
7,工程名
工程名一般全用小写字母,每个单词之间加下划线或中划线
如
‘ssh_transaction_item’
类。
方法,接口之间最好空一行
5java数据类型
byte:
8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:
16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:
32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:
64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:
32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:
64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:
只有true和false两个取值。
char:
16位,存储Unicode码,用单引号赋值。
这8种数据类型可以大致分为整型、浮点型、字符型、布尔型
String不是基本类型,是类。
6面向对象和面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
7面向对象的基本思想
封装
面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
面向对象方法的主要优点是:
符合人们通常的思维方式;
从分析到设计再到编码采用一致的模型表示具有高度连续性;
软件重用性好。
8类的定义
类(Class)实际上是对某种类型的对象定义变量和方法的原型。
类的定义格式分为说明部分和实现部分,说明部分是用来说明类中的成员,包括成员的说明和函数的说明。
说明部分是用来说明干什么。
而实现部分是用来说明怎么干。
9对象的创建
Java中创建对象的四种方式
1.用new语句创建对象,这是最常见的创建对象的方法。
2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
3.调用对象的clone()方法。
4.运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法。
第一种最常见
10构造函数的作用
类有一个特殊的成员方法叫作构造方法,它的作用是创建对象并初始化成员变量。
在创建对象时,会自动调用类的构造方法。
Java中的构造方法必须与该类具有相同的名字,并且没有方法的返回类型(包括没有
void)。
另外,构造方法一般都应用public类型来说明,这样才能在程序任意的位置创建类
的实例--对象。
每个类至少有一个构造方法。
如果不写一个构造方法,Java编程语言将提供一个默认的,
该构造方法没有参数,而且方法体为空。
如果一个类中已经定义了构造方法则系统不再提供默认的构造方法。
作用一:
初始化成员变量
作用二:
当要调用同一个函数名的函数时,重载,方便程序员使用
函数的重载
有时候会需要使用几种不同的方法来创建对象
11Static
static静态的。
。
表示不需要对象就可以访问的意思。
声明为static的变量实质上就是全局变量。
12this
13对象初始化的顺序
1.
父类静态成员和静态初始化块,按在代码中出现的顺序依次执行
2.
子类静态成员和静态初始化块,按在代码中出现的顺序依次执行
3.
父类实例成员和实例初始化块,按在代码中出现的顺序依次执行
4.
父类构造方法
5.
子类实例成员和实例初始化块,按在代码中出现的顺序依次执行
6.
子类构造方法
14String,StringBuffer与StringBuilder区别
String是不可改变,定长;
StringBuffer是不定长,可改变,通过分配更大的内存实现,StringBuffer是线程安全的可变字符序列。
可将字符串缓冲区安全地用于多个线程。
可以在必要时对这些方法进行同步。
StringBuilder是单个线程使用的StringBuffer等价类,一个可变的字符序列。
此类提供一个与StringBuffer兼容的API,但不保证同步。
该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。
在StringBuilder上的主要操作是append和insert方法,append方法始终将这些字符添加到生成器的末端;
而insert方法则在指定的点添加字符。
将StringBuilder的实例用于多个线程是不安全的。
如果需要这样的同步,则建议使用StringBuffer。
本来以为StringBuilder和StringBuffer的equals方法是可以比较两个字符串的内容是否相等,今天才发现不是这么回事。
这两个类都直接继承自Object,并且没有重写equals方法。
StringBuildersb1=newStringBuilder("
123"
);
StringBuildersb2=newStringBuilder("
System.out.println(sb1.equals(sb2));
输出结果是:
false
若要比较内容是否相同,sb1.toString().equals(sb2.toString())
15equals和hashcode的比较
hashCode主要用在hashtable类的。
是为了快速的验证两个对象是否相等。
如果两个对象的hashcode不等,这两个对象就不等,如果hashcode相等,再进一步比较equals方法。
这样有什么好处呢?
因为hashcode是int,比较它们是否相等速度非常快,可以提高性能。
用最简单的方法来说,hashcode就是一个签名。
当两个对象的hashcode一样时,两个对象就有可能一样。
如果不一样的话两个对象就肯定不一样。
一般用hashcode来进行比较两个东西是不是一样的,可以很容易的排除许多不一样的东西。
最常用的地方就是在一堆东西里找一个东西。
先用你要找的东西的hashcode和所有东西的hashcode比较,如果不一样的话就肯定不是你要找的东西。
如果一样的话就很可能是你要找的东西。
然后再进行仔细的比较两个东西是不是真的一模一样。
16synchronized和Lock
Q:
synchronized和Lock有什么差别啊?
用法怎么用啊?
现在是用synchronize好?
还是用lock好?
A:
有区别,所实现的锁功能是一致的,但是Lock的功能更为强大一些。
比如Lock可以产生多个条件变量,可以实现多个类似于wait,notifyAll的等待及唤醒功能。
而synchronized只有一个条件变量,也就是锁对象的wait和notifyAll.
synchronized也有好处的,比如一些性能监控工具,可以监测到synchronized的锁。
无法监测到Lock的锁定,毕竟Lock的锁定是通过代码实现的,而synchronized是在JVM层面上实现的。
要监控工具能监测到Lock的锁定那还需要有一段时日。
另外,synchronized在锁定时如果方法块抛出异常,JVM会自动将锁释放掉,不会因为出了异常没有释放锁造成线程死锁。
但是Lock的话就享受不到JVM带来自动的功能,出现异常时必须在finally将锁释放掉,否则将会引起死锁。
Lock锁的代码结构一般是这样的:
Javacode
lock.lock();
try{
xxxx;
}finally{
lock.unlock();
}
17Finalize
finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
垃圾收集器只知道释放那些由new分配的内存,所以不知道如何释放对象的“特殊”内存。
为解决这个问题,Java提供了一个名为finalize()的方法,它的工作原理应该是这样的:
一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。
所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作(如关闭流等操作)。
18数组和链表
数组中的数据在内存中的按顺序存储的,而链表是随机存储的!
要访问数组中的元素可以按下标索引来访问,速度比较快,如果对他进行插入操作的话,就得移动很多元素,所以对数组进行插入操作效率很低!
由于连表是随机存储的,链表在插入,删除操作上有很高的效率(相对数组),如果要访问链表中的某个元素的话,那就得从链表的头逐个遍历,直到找到所需要的元素为止,所以链表的随机访问的效率就比数组要低
19Swing窗体的种类
Swing窗体的种类,包括Jcomponent类,JFrame类,JApplet类,JDialog类和拆分Swing窗口JSplitPane等。
1、Jcomponent类
◆Jcomponent类是所有轻量组件的父类,主要的子类有:
◆JButton创建按钮对象,而且可以创建在图标的按钮;
JTree创建树对象
◆JComboBox创建组合框对象,和Choice相似;
JCheckBox创建复选框对象
◆JFileChooser创建文件选择器;
JInternalFrame创建内部窗体
◆JLabel创建标签;
JMenu创建菜单对象;
JMenuBar创建菜单条对象
◆JMenuItem创建菜单项对象;
JPanel创建面板对象;
JPasswordField创建口令文本对象
◆JPopupMenu创建弹出式菜单;
JProgressBar创建进程条;
JRadioButton创建单选按钮
◆JScrollBar创建滚动条;
JScrollPane创建滚动窗格;
JSlider创建滚动条
◆JSplitPane创建拆分窗格;
JTable创建表格;
JTextArea创建文本区
◆JTexPane创建文本窗格;
JToolBar创建工具条;
JToolTip创建工具提示对象
2、JFrame类
JFrame类及其子类创建的对象是窗体
(1)JFrame类及其子类创建的窗体是Swing窗体
(2)不可以把组件直接加到Sing窗体中,应该把组件加到内容面板中
(3)不能为Sing窗体设置布局,而应当为内容面板设置布局
(4)Sing窗体通过调用getContentPane()方法得到它的内容面板
3、JApplet类
(1)不可以把组件直接添加到小程序容器中,也应该添加到内容面板中
(2)不能为小程序设置布局
(3)小程序容器通过调用getContenPane()方法得到内容面板
4、JDialog类
(1)不可以把组件直接添加到对话框容器中,也应该添加到内容面板中
(2)不能为对话框设置布局
(3)对话框容器通过调用getContenPane()方法得到内容面板
5、JPanel面板:
JPanel();
JPanel(布局对象)
6、滚动窗口JScrollPane:
JScrollPane();
JScrollPane(componentc)
7、拆分Swing窗口JSplitPane
JSplitPane(inta,Componentb,Componentc)
a的取值是HORIZONTAL_SPLIT或者VERTICAL_SPLIT决定水平拆分还是垂直拆分
JSplitPane(inta,booleanb,Componentb,Componentc)b的取值决定拆分线移动的时候组件是否连续变化
8、内部Swing窗体JInternalFrame
JInternalFrame(Stringtitle,booleanresizable,booleamclosable,booleanmax,booleanmin)
参数的意义分别是窗口名称,是否能调整大小,是否有关闭按钮,最大化按钮,最小化按钮
(1)不能把组件直接加到窗体中,而是加到内容面板中
(2)必须先把内部窗体加到一个容器中(JDesktopPane),该容器是专门为内部窗体服务的
9、按钮(JButton)
◆JButton()创建按钮;
JButton(Strings)s是按钮的名字
◆JButton(Iconicon)icon是按钮上的图标;
JButton(Strings,Iconicon)
◆getText()获取按钮名字;
getIcon()获取按钮图标
◆setIcon(Iconicon)设置按钮图标
◆setHorizontalTextposition(inta)a确定按钮上图标的位置,取值:
◆AbstractButton_CENTR,AbstractButton_LEFT,AbstractButton_RIGHT
◆setVerticalTextposition(inta)a确定按钮上名字相对图标的位置,取值:
◆AbstractButton.TOP,AbstractButton.BOTTOM,AbstractButton.CENTR
◆setMnemonic(charc)设置按钮的键盘操作方式是字符c(Alt+c)
◆setEnabled(boole
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 基础 复习