【Java精品源码栏目提醒】:网学会员为需要Java精品源码的朋友们搜集整理了java基础教程笔记 - 其它资料相关资料,希望对各位网友有所帮助!
JAVA 基础教程笔记第一章:
java 语言概述J2se:J2SE(StandardEdition)就是
Java2 的标准版,主要用于桌面应用软件的编程J2ee:J2ME(microedition) ,又称为微缩版,主要应用于嵌入是系统开发,如手机和 PDA 的编程Jsme:J2EE(EnterpriseEdition)是
Java2 的企业版,主要用于分布式的网络程序的开发类库:属性和方法,是对具体的一种抽象OOAOOPOOD.
Java 和 C 和 c语言都是跨平台的语言1. c 和 c是
源码型平台无关性语言。
2.
java 是目标型的平台无关性语言。
Java 的执行方式和 c 语言的执行方式的区别?JVM: JVM 是
Java Virtual Machine(
Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过以介绍面向对象编程的基本概念、 基本理论为重点,结合
Java 语言的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对
Java 技术有一个总体了解,通过本课程学习,使学生掌握
Java 语言的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用
Java 语言进行程序的编写、编译以及调试工作在实际的计算机上仿真模拟各种计算机功能来实现的。
Java 虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。
JVM 屏蔽了与具 使体操作系统平台相关的信息,
Java 程序只需生成在
Java 虚拟机上运行的目标代码 (字节码)就可以在多种平台上不加修改地运行。
JVM 在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
编译虚拟机的指令集与编译微处理器的指令集非常类似。
什么叫做环境变量?环境变量的设置,变量名,变量值(jdk 所安装的位置),幻灯片有相关内容第二章:
java 程序结构
Java 程序的结构: 1. /这是一个简单的
Java 程序示例程序/ 2. packagemypack 3. importjava.util. 4. publicclassExample 5. publicstaticvoidmainStringargs 6. System.out.printlnquotJava 欢迎您!quot 7. 8. args:主函数调用时候传入的参数finalvarTypevarNamevalue,声明一个常量的时候!比如说声明一个圆周率:3.14
java 的基本数据类型‐记忆true 和 false 在
java 语言中,true 和 false 的值是什么?0 或 1…….Byte:本身是整形,是一个字节,在 32 位机和 64 位机上是不会改变的。
Unicode:唯一码是两个字节,背景:用两个字节表示一个汉字char 与 byte 或 short 之间的赋值必须实行强制转换有关基本数据类型的知识挖掘?算术运算符和算术表达式:
JAVA 移位运算符: 移位运算符就是在二进制的基础上对数字进行平移。
按照平移的方向和填充数字的规则分为三种:ltlt(左移) 、gtgt(带符号右移)和gtgtgt(无符号右移) 。
在移位运算时, byte、short 和 char 类型移位后的结果会变成 int 类型,对于 byte、short、char 和 int 进行移位时,规定实际移动的次数是移动次数和 32 的余数,也就是移位 33 次和移位 1 次得到的结果相同。
移动 long 型的数值时,规定实际移动的次数是移动次数和 64 的余数,也就是移动 66 次和移动 2 次得到的结果相同。
三种移位运算符的移动规则和使用如下所示: ltlt运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃) ,低位的空位补零。
语法格式: 需要移位的数字 ltlt 移位的次数 例如: 3ltlt2,则是将数字 3 左移 2 位 计算过程: 3ltlt2 首先把 3 转换为二进制数字 00000000000000000000000000000011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移 2 位,最后在低位(右侧)的两个空位补零。
则得到的最终结果是 00000000000000000000000000001100,则转换为十进制是12.数学意义: 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以 2 的 1 次方,左移n 位就相当于乘以 2 的 n 次方。
gtgt运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃) ,高位的空位补符号位,即正数补零,负数补 1. 语法格式: 需要移位的数字 gtgt 移位的次数 例如 11gtgt2,则是将数字 11 右移 2 位 计算过程:11 的二进制形式为:00000000000000000000000000001011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。
则得到的最终结果是 00000000000000000000000000000010.转换为十进制是 3.数学意义:右移一位相当于除 2,右移 n 位相当于除以 2 的 n 次方。
gtgtgt运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃) ,高位的空位补零。
对于正数来说和带符号右移相同,对于负数来说不同。
那么不同点是什么?无符号位移(gtgtgt)和有符号位移(gtgt)的区别是有符号位移运算时如果数字为正数时位移后在前面补 0,为负数时则在位移后在前面补 1例100gtgt225 和上面的计算方法一样如果 100 为负数‐100gtgtgt2‐100 的二进制为 1111111111111111111111111111111111111111111111111111111111111100移除最后 2 位后11111111111111111111111111111111111111111111111111111111111111之后在前面补两位1111111111111111111111111111111111111111111111111111111111111111变为十进制后结果为‐1所以‐100gtgtgt2‐1 其他结构和gtgt相似。
小结 二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算, 并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。
实例操作:publicclassURShiftpublicstaticvoidmainStringargsinti‐1igtgtgt10//System.out.printlnimTestpublicstaticvoidmTest//左移inti12//二进制为:0000000000000000000000000001100i ltlt 2 //i 左移 2 位,把高位的两位数字左侧开始抛弃低位的空位补 0二进制码就为0000000000000000000000000110000System.out.printlni//二进制 110000 值为 48;System.out.printlnquotltbrgtquot//右移igtgt2//i 右移 2 为,把低位的两个数字右侧开始抛弃高位整数补 0,负数补 1,二进制码就为 0000000000000000000000000001100System.out.printlni//二进制码为 1100 值为 12System.out.printlnquotltbrgtquot//右移 exampleintj11//二进制码为 00000000000000000000000000001011j gtgt 2 // 右 移 两 位 , 抛 弃 最 后 两 位 整 数 补 0 二 进 制 码 为 :00000000000000000000000000000010System.out.printlnj//二进制码为 10 值为 2System.out.printlnquotltbrgtquotbytek‐2//转为 int二进制码为:0000000000000000000000000000010kgtgt2//右移 2 位, 抛弃最后 2 位,负数补 1二进制吗为:11000000000000000000000000000System.out.printlnj//二进制吗为 11 值为 2在 ThinkinginJava 第三章中的一段话:移位运算符面向的运算对象也是 。
二进制的“位” 可单独用它们处理整数类型(主类型的一种) 。
左移位运算符(ltlt)能将 。
运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补 0) “有符号”右移位运算符(gtgt)则将运算符左边的运算对象向右移动运算符右侧指定的位数。
“有符号”右移位运算符使用了“符号扩展” :若值为正,则在高位插入 0;若值为负,则在高位插入 1。
Java也添加了一种“无符号”右移位运算符(gtgtgt) ,它使用了“零扩展”:无论正负,都在高位插入 0。
这一运算符是 C 或 C没有的。
若对 char,byte 或者 short 进行移位处理, 那么在移位进行之前, 它们会自动转换成一个 int。
只有右侧的 5 个低位才会用到。
这样可防止我们在一个 int 数里移动不切实际的位数。
若对一个 long 值进行处理,最后得到的结果也 是 long。
此时只会用到右侧的 6 个低位,防止移动超过 long 值里现成的位数。
但在进行“无符号”右移位时,也可能遇到一个问题。
若对byte 或 short 值进行右移位运算,得到的可能不是正确的结果(
Java 1.0 和
Java 1.1 特别突出)。
它们会自动转换成 int 类型,并进行右移位。
但“零扩展”不会发生,所以在那些情况下会得到‐1 的结果。
基本语句三种基本语句类型和 c 语言相同。
break带标签和不带标签的区别outer:for………这里面 outer 就是标签的作用。
Continue 语句,也可以带标签。
一般带有标签的操作,是作用于多层循环之中,为了跳出某层循环的作用。
Java 中各种运算符中的优先级:说明: 1、 该表中优先级按照从高到低的顺序书写,也就是优先级为 1 的优先级最高,优先级 14的优先级最低。
2、 结合性是指运算符结合的顺序,通常都是从左到右。
从右向左的运算符最典型的就是负号,例如 3‐4,则意义为 3 加‐4,符号首先和运算符右侧的内容结合。
3、 instanceof 作用是判断对象是否为某个类或接口类型,后续有详细介绍。
4、 注意区分正负号和加减号,以及按位与和逻辑与的区别 其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代,示例代码: intm12 intnmltlt12 intnmltlt12//这样更直观
java 的分支语句练习:1. 屏幕输出九九乘法表如下:2. 对一个给定的数组进行排序,要求输出原数组和排序后的数组。
3. 屏幕输出一个魔方阵:魔方阵的排列方法 如 3×3 的魔方阵: 816 357 492 魔方阵的排列规律如下:第三章:面向对象面向过程:结构话程序设计:面向对象的程序设计:类的创建public abstract final class className extends superclassName implementsinterfaceNameList 成员变量声明及初始化; 方法声明及方法体; implementsinterfaceNameList:接口的列表Protected,是只有子类可以访问该属性缺省:就是同一包内面可以访问Example3‐15 参数的传递?Dos 下 typejavacjavajavap:反编译Javadoc.javaStartindex.html第四章:继承和多态如果要声明类 B 继承类 A,则必须满足两个条件:1 类 A 非 final ;2 类 A 是 public 或类B 与类 A 同包。
如果这两个条件满足则可按照以下的语法声明类 B:classB extends A…..在上述面向对象的基本概念基础之上,不可避免地要涉及到面向对象程序设计所具有的 4个共同特征:抽象性、封装性、继承性和多态性。
1.抽象抽象是人们认识事物的常用方法,比如地图的绘制。
抽象的过程就是如何简化、概括所观察到的现实世界,并为人们所用的过程。
抽象是软件开发的基础。
软件开发离不开现实环境,但需要对信息细节进行提炼、抽象,找到事物的本质和重要属性。
抽象包括两个方面:过程抽象和数据抽象。
过程抽象把一个系统按功能划分成若干个子系统,进行quot自顶向下逐步求精quot的程序设计。
数据抽象以数据为中心,把数据类型和施加在该类型对象上的操作作为一个整体(对象)来进行描述,形成抽象数据类型 ADT。
所有编程语言的最终目的都是提供一种quot抽象quot方法。
一种较有争议的说法是:解决问题的复杂程度直接取决于抽象的种类及质量。
其中,quot种类quot是指准备对什么进行quot抽象quot。
汇编语言是对基础机器的少量抽象。
后来的许多quot命令式quot语言(如 FORTRAN、BASIC 和 C)是对汇编语言的一种抽象。
与汇编语言相比,这些语言已有了较大的进步,但它们的抽象原理依然要求程序设计者着重考虑计算机的结构,而非考虑问题本身的结构。
在机器模型(位于quot方案空间quot)与实际解决的问题模型(位于quot问题空间quot)之间,程序员必须建立起一种联系。
这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。
由此造成的副作用便是一门完善的quot编程方法quot学科。
为机器建模的另一个方法是为要解决的问题制作模型。
对一些早期语言来说,如 LISP 和 APL,它们的做法是quot从不同的角度观察世界quot、quot所有问题都归纳为列表quot或quot所有问题都归纳为算法quot。
PROLOG 则将所有问题都归纳为决策链。
对于这些语言,可以认为它们一部分是面向基于quot强制quot的编程,另一部分则是专为处理图形符号设计的。
每种方法都有自己特殊的用途,适合解决某一类的问题。
但只要超出了它们力所能及的范围,就会显得非常笨拙。
面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具来表达问题空间内的元素。
由于这种表达非常普遍,所以不必受限于特定类型的问题。
人们将问题空间中的元素以及它们在方案空间的表示物称作quot对象quot。
当然,还有一些在问题空间没有对应体的其他对象。
通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。
所以在阅读方案的描述代码时,会读到对问题进行表达的话语。
与以前的方法相比,这无疑是一种更加灵活、更加强大的语言抽象方法。
总之,OOP 允许人们根据问题,而不是根据方案来描述问题。
然而,仍有一个联系途径回到计算机。
每个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。
与现实世界的quot对象quot或者quot物体quot相比,编程quot对象quot与它们也存在共通的地方:它们都有自己的特征和行为。
2.封装封装是面向对象编程的特征之一,也是类和对象的主要特征。
封装将数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。
外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。
如果这些数据发生了差错,也很容易以介绍面向对象编程的基本概念、基本理论为重点,结合
Java 语言的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对
Java 技术有一个总体了解,通过本课程学习,使学生掌握
Java 语言的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用
Java 语言进行程序的编写、编译以及调试工作定位错误是由哪个操作引起的。
如果外部需要访问类里面的数据,就必须通过接口(Interface)进行访问。
接口规定了可对一个特定的对象发出哪些请求。
当然,必须在某个地方存在着一些代码,以便满足这些请求。
这些代码与那些隐藏起来的数据叫作quot隐藏的实现quot。
站在过程化程序编写(Procedural Programming)的角度,整个问题并不显得复杂。
一种类型含有与每种可能的请求关联起来的函数。
一旦向对象发出一个特定的请求,就会调用那个函数。
通常将这个过程总结为向对象quot发送一条消息quot(提出一个请求)。
对象的职责就是决定如何对这条消息作出反应(执行相应的代码)。
若任何人都能使用一个类的所有成员,那么可对这个类做任何事情,则没有办法强制他们遵守任何约束--所有东西都会暴露无遗。
有两方面的原因促使了类的编制者控制对成员的访问。
第一个原因是防止程序员接触他们不该接触的东西--通常是内部数据类型的设计思想。
若只是为了解决特定的问题,用户只需操作接口即可,无需明白这些信息。
类向用户提供的实际是一种服务,因为他们很容易就可看出哪些对自己非常重要,以及哪些可忽略不计。
进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。
例如,编制者最开始可能设计了一个形式简单的类,以便简化开发。
以后又决定进行改写,使其更快地运行。
若接口与实现方法早已隔离开,并分别受到保护,就可放心做到这一点,只要求用户重新链接一下即可。
封装考虑的是内部实现,抽象考虑的是外部行为。
符合模块化的原则,使得软件的可维护性、扩充性大为改观。
3.继承继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类的继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更适合特殊的需求。
这也体现了大自然中一般与特殊的关系。
继承性很好地解决了软件的可重用性问题。
比如说,所有的 Windows 应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。
但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。
关于继承的详细讨论,将在第 4.1~4.2 节进行。
4.多态性多态性是指允许不同类的对象对同一消息作出响应。
比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。
又比如,同样的选择quot编辑quot、quot粘贴quot操作,在字处理程序和绘图程序中有不同的效果。
多态性包括参数化多态性和运行时多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。
关于多态性的讨论,将在 4.7~4.9 节进行。
最后,以 Alan Kay 的话作为本节的结束语。
他总结了 Smalltalk(这是第一种成功的面向对象程序设计语言,也是
Java 的基础语言)的五大基本特征。
通过这些特征,读者可以理解quot纯粹quot的面向对象程序设计方法。
(1)所有东西都是对象。
可将对象想象成一种新型变量,它保存着数据,但可要求它对自身进行操作。
理论上讲,可从要解决的问题上,提出所有概念性的组件,然后在程序中将其表达为一个对象。
(2)程序是一大堆对象的组合。
通过消息传递,各对象知道自己该做些什么。
为了向对象发出请求,需向那个对象quot发送一条消息quot。
更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。
(3)每个对象都有自己的存储空间,可容纳其他对象。
或者说,通过封装现有对象,可制作出新型对象。
所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。
(4)每个对象都有一种类型。
根据语法,每个对象都是某个quot类(Class)quot的一个quot实例quot。
其中,quot类quot是quot类型(Type)quot的同义词。
一个类最重要的特征就是quot能将什么消息发给它?quot。
(5)同一类所有对象都能接收相同的消息。
这实际是别有含义的一种说法,读者不久便能理解。
由于类型为quot圆(Circle)quot的一个对象也属于类型为quot形状(Shape)quot的一个对象,所以一个quot圆quot完全能接收quot形状quot的消息。
这意味着可让程序代码统一指挥quot形状quot,令其自动控制所有符合quot形状quot描述的对象,其中自然包括quot圆quot。
这一特性称为对象的quot可替换性quot,是 OOP 最重要的概念之一。
访问控制符的理解和练习显示调用和隐式调用的含义:This:Super: 1. classA 2. protected doubley2.13 3. 4. classBextendsA 5. inty0 6. voidg() 7. yy10 8. System.out.printf(quotydnquoty) 9. 10. 11. classExample 12. publicstaticvoidmain(Stringargs) 13. B bnewB() 14. b.y‐20 15. b.g() 16. 17. 断点调试此实例的执行过程。
多态的实质1. 基本类型: inta10 longba a 是 32 位,b 是 64 位。
a 拷贝的时候进行自动扩充,实现初始化语句两边的类型一致。
基本类型是通过传值引用来实现。
2. 对象类型 对象变量的引用是按照传址来实现的,也就是说变量在传递的过程中传递的是对象变量 (对象句柄)的拷贝,也就是内存地址的传递,而实际的对象并不会受到数据位的扩充 和缩减,所以实际对象的内容存放在堆中是不会改变的。
见幻灯片类和对象内存的分配。
总结: 在父类总声明,并在子类中覆盖的方法,可以实现多态的调用,编译器和解释器都会找 到正确的类型,也就调用对象的实际类型,但在父类中没有声明的方法,是不可以采用 多态的形式调用的。
第八章:多线程创建线程的两种方法创建新执行线程有两种方法。
一种方法是将类声明为 Thread 的子类。
该子类应重写 Thread 类的 run 方法。
接下来可以分配并启动该子类的实例。
例如,计算大于某一规定值的质数的线程可以写成:class PrimeThread extends Thread long minPrime PrimeThreadlong minPrime this.minPrime minPrime public void run // compute primes larger than minPrime . . . 然后,下列代码会创建并启动一个线程:.
上一篇:
网上求职招聘系统(论文范文,JSP,JAVA,毕业设计)
下一篇:
bc80e7a0-d1f2-4595-b21d-01a76798e87a