1、手把手教程 V3.0版权所有:尚学堂科技尚学堂内容 第一章:JAVA概述 第二章:JAVA语言基础 第三章:面向对象编程 第四章:JAVA异常处理机制 第五章:数组 第六章:JAVA常用类 第七章:JAVA容器类 第八章:JAVA流技术 第九章:JAVA多线程机制 第十章:JAVA网络编程 第十一章:GUI编程尚学堂 手把手教程 V3.0授课:张志宇授课:张志宇版权所有:尚学堂科技第一章:J2SE 之 JAVA概述手把手教程 V3.0版权所有:尚学堂科技尚学堂内容1. 计算机语言的历史以及Java语言的历史地位2. Java自身的发展史3. Java体系4. Java的特点5. Java的运行
2、机制6. Java运行环境的安装与配置7. 第一个程序HelloWorld手把手教程 V3.0版权所有:尚学堂科技尚学堂计算机语言发展史及Java的历史地位 第一代语言 第一代语言第一代语言或机器语言机器语言是一种低级的面向计算机的程序设计语言,使用0和1表示各种命令。 第二代语言 汇编 第三代语言 C、Pascal、Fortran面向过程的语言 C+面向过程/面向对象 Java跨平台的纯面向对象的语言跨平台的纯面向对象的语言 .NET跨语言的平台手把手教程 V3.0版权所有:尚学堂科技尚学堂Java发展史与java体系 95年,Sun发布JDK1.0 98年,JDK1.2,更名为Java2
3、后续JDK1.3、1.4 目前JDK1.5,更名为Java 5.0 (最新为JDK 6 Update 3) 我们使用5.0j2sejava webj2eej2me移动增值JAVA能开发那些类型的程序?手把手教程 V3.0版权所有:尚学堂科技尚学堂Java语言的特点 一种面向对象的语言。 一种平台无关的语言,提供程序运行的解释环境。 一种健壮的语言,吸收了C/C+ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。手把手教程 V3.0版权所有:尚学堂科技尚学堂Java程序运行机制及运行过程源程序源程序(*.java文件)文件)字节码字节码(*.class文件)文件)Ja
4、va编译器编译器类装载器类装载器 Class Loader字节码校验器字节码校验器 byte verifier解释器解释器 interpretor系统平台系统平台手把手教程 V3.0版权所有:尚学堂科技尚学堂核心机制之Java虚拟机 Java虚拟机可以理解成一个以字节码为机器指令的 CPU。 对于不同的运行平台,有不同的虚拟机。 Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。UNIXJVM for UNIXWindowsJVM for WindowsOther PlatformJVM for Other*.java*.class编译编译执行执行手把手教程 V3.0
5、版权所有:尚学堂科技尚学堂核心机制之垃圾收集 garbage collector 不再使用的内存空间应回收垃圾收集。 在C/C+ 等语言中,由程序员负责回收无用内存。 Java语言消除了程序员回收无用内存空间的责任;它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。 垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。 手把手教程 V3.0版权所有:尚学堂科技尚学堂J2SDK & JRESoftware Devleopment Kit (软件开发包)Java Runtime Environment (Java运行环境)开发需要J
6、DK用户只需JRE手把手教程 V3.0版权所有:尚学堂科技尚学堂开发JDK的不止一家 最主流的是Sun公司发布的JDK 除了Sun之外,还有很多公司和组织都开发了自己的JDK IBM公司开发的JDK, IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多 BEA公司的Jrocket,专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多 GNU组织开发的JDK手把手教程 V3.0版权所有:尚学堂科技尚学堂Java开发环境的下载 安装 配置 配置Java开发环境步骤(WindowsXP) 下载并安装最新版本的
7、J2SDK。 设置 Windows 环境变量。PATH/CLASSPATH 选择合适的文本编辑器或使用集成开发环境。 下载 http:/ 安装 配置 path & classpath 验证 java 运行java程序 javac 编译java程序HelloWorld.java手把手教程 V3.0版权所有:尚学堂科技尚学堂Java Application初步 Java源文件以“java”为扩展名。源文件的基本组成部分是类(class),如本例中的 HelloWorld 类。 一个源文件中最多只能有一个public 类。其它类的个数不限,如果源文件包含一个public 类,它必需按该类名命名。 J
8、ava 应用程序的执行入口是 main() 方法。它有固定的书写格式: public static void main(String args) Java 语言中严格区分大小写。 Java 方法由一条条语句构成,每个语句以分号结束。 Java语言有三种注释方式:/ 用于单行注释/* 用于多行注释*/* * 用于多行注释,且可以被 doc 工具解析 */手把手教程 V3.0版权所有:尚学堂科技尚学堂常见Java 开发环境 编辑器 UltraEdit EditPlus 集成开发环境(IDE Integrated Development Environment): JBuilder (http:/)
9、 Eclipse (http:/www.eclipse.org) Sun One Studio Net Beans(http:/) WSADRAD (http:/) WebSphere Application Developer Rational Application Developer IntelliJ IDEA 手把手教程 V3.0版权所有:尚学堂科技尚学堂常见错误常见错误 出现如下错误的原因:java 不是内部或外部命令,也不是可运行的程序或批处理文件。 编译javac Test.java,明明看到该文件,为何找不到?HelloWorld.java.txt 显示扩展名!显示扩展名! 程
10、序员的桌面设置 (详细列表 / 显示所有文件 / 标题栏地址栏全路径)手把手教程 V3.0版权所有:尚学堂科技尚学堂java命令运行的是那个版本? 如果安装了多个版本jdk,那么java命令运行的是那个版本的呢? java version java verbose java -verbose HelloWorld 有时候,修改了一个jdk下面的配置,但始终无法生效。就是这个道理。尚学堂 手把手教程 V3.0授课:张志宇授课:张志宇版权所有:尚学堂科技第二章:J2SE 之 基础语法手把手教程 V3.0版权所有:尚学堂科技尚学堂内容1. 标识符2. 关键字3. Java 基本数据类型4. 运算符5
11、. 表达式和语句6. 分支7. 循环8. 方法9. 变量的作用域10.递归调用手把手教程 V3.0版权所有:尚学堂科技尚学堂标识符 Java 语言中,对各种变量变量、方法方法和类类等要素命名时使用的字符序列称为标识符。 Java 标识符有如下命名规则: 标识符由字母、下划线“_” 、美元符“$”或数字组成。 标识符应以字母、下划线 、美元符开头。 Java 标识符大小写敏感,长度无限制。 约定俗成:约定俗成:Java 标识符选取因注意“见名知意”且不能与 Java 语言的关键字重名。合法的标识符合法的标识符不合法的标识符不合法的标识符 HelloWorld class DataClass Da
12、taClass# _983 98.3 $bS5_c7 Hell World手把手教程 V3.0版权所有:尚学堂科技尚学堂关键字 Java 中一些赋以特定的含义,用做专门用途的字符串称为关键字(keyword)。 所有Java关键字都是小写英文字符串。 goto 和 const 虽然从未使用,但也作被为 Java 关键字保留。abstract default ifprivatethisbooleandoimplementsprotectedthrowbreak doubleimportpublicthrowsbyteelseinstanceofreturntransientcaseextends
13、intshorttrycatchfinalinterfacestaticvoidcharfinallylongstrictfpvolatileclassfloatnativesuperwhileconstfornewswitchnullcontinuegotopackagesynchronized 手把手教程 V3.0版权所有:尚学堂科技尚学堂Java常量 Java 的常量值用字符串表示,区分不同的数据类型。 如整型常量 123 实型常量 3.14 字符常量 a 逻辑常量 true、false 字符串常量 “helloworld” null 注意: 区分字符常量和字符串常量 区分 null 和
14、 “”手把手教程 V3.0版权所有:尚学堂科技尚学堂Java变量 Java变量是程序中最基本的存储单元,其要素包括变量名变量名,变量类型变量类型和作用域作用域。 Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为: type varName =value,varName=value 例如: int i = 100; float f = 12.3f; double d1, d2, d3 = 0.123; String s = “hello”; 从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必须要先申请(声明),然后必须进行赋
15、值(填充内容),才能使用值名字手把手教程 V3.0版权所有:尚学堂科技尚学堂提示: 程序执行过程硬盘程序内存代码操作系统代码1:Load到内存区2:找到main方法开始执行heapstackdata segmentcode segment3:执行过程中的内存管理存放代码静态变量字符串常量局部变量new出来的东西手把手教程 V3.0版权所有:尚学堂科技尚学堂Java变量的分类 按被声明的位置划分: 局部变量:方法或语句块内部定义的变量 成员变量:方法外部、类的内部定义的变量 注意:类外面(与类对应的大括号外面)不能有变量的声明 按所属的数据类型划分: 基本数据类型变量 引用数据类型变量手把手教程
16、 V3.0版权所有:尚学堂科技尚学堂Java局部变量与成员变量 方法体内部声明的变量(包括形参)称为局部变量: 方法体内部是指与方法对应的大括号内部 在方法体外,类体内声明的变量成为成员变量public void method() int i; int j = i+5 ; / 编译出错,变量i还未被初始化 double d = 3.14; 注:以上程序目前还不能编译TestVar.java手把手教程 V3.0版权所有:尚学堂科技尚学堂Java数据类型的划分数据类型基本数据类型引用数据类型数值型字符型(char)布尔型(boolean)整数类型(byte,short,int,long)浮点类型(
17、float, double)类(class)接口(interface)数组手把手教程 V3.0版权所有:尚学堂科技尚学堂Java基本数据类型 Java中定义了4类8种基本数据类型。 逻辑型boolean 字符型 char 数值型 整数型 byte, short, int, long 浮点数型 float, double手把手教程 V3.0版权所有:尚学堂科技尚学堂逻辑型Boolean boolean 类型适于逻辑运算,一般用于程序流程控制 。 boolean 类型数据只允许取值 true 或 false ,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。 用法举
18、例: boolean flag; flag = true; if(flag) /do something 手把手教程 V3.0版权所有:尚学堂科技尚学堂字符型char char 型数据用来表示通常意义上的“字符” 字符常量为用单引号括起来的单个字符,例如: char eChar = a; char cChar =中; Java 字符采用 Unicode 编码,每个字符占两个字节,因而可用十六进制编码形式表示,例如: char c1 = u0061; 注:Unicode是全球语言统一编码 Java 语言中还允许使用转义字符 来将其后的字符转变为其它的含义,例如: char c2 = n; /n代
19、表换行符 补充:2进制、10进制、16进制之间的转换 1101 11 0 2 1 4 1 8 13 1 4 8 1101 1101 D手把手教程 V3.0版权所有:尚学堂科技尚学堂类 型占用存储空间表数范围 byte 1字节 -128 127 short 2字节 -215 215-1 int 4字节 -231 231-1 long 8字节 -263 263-1 整数类型 Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。 Java 语言整型常量的三种表示形式: 十进制整数,如:12, -314, 0。 八进制整数,要求以 0 开头,如:01
20、2。 十六进制数,要求 0 x 或 0X 开头,如:0 x12 。 Java语言的整型常量默认为int型,声明long型常量可以后加 l 或 L ,如: int i1 = 600; /正确 long l1 = 88888888888L; /必须加l否则会出错手把手教程 V3.0版权所有:尚学堂科技尚学堂类 型占用存储空间表数范围 float 4字节 -3.403E383.403E38 double 8字节 -1.798E3081.798E308 浮点类型 与整数类型类似,Java浮点类型有固定的表数范围和字段长度,不受平台影响。 Java 浮点类型常量有两种表示形式 十进制数形式,例如: 3.
21、14 314.0 .314 科学记数法形式,如 3.14e2 3.14E2 100E-2 Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F ,如: double d = 12345.6; /正确 float f = 12.3f; /必须加f否则会出错 下面列出 Java 的各种浮点类型TestVar2.java手把手教程 V3.0版权所有:尚学堂科技尚学堂 java中可以从任意基本类型任意基本类型转型到另外的基本类型 例外例外 boolean 类型不可以转换为其他的数据类型。 转换分为默认转换和强制转换 整形,字符型,浮点型的数据在
22、混合运算中相互转换,转换时遵循以下原则: 容量小的类型默认转换为容量大的数据类型;数据类型按容量大小排序为: byte,short,char-int-long-float-double byte,short,char之间不会互相转换,他们三者在计算时首先回转换为int类型 容量大的数据类型转换为容量小的数据类型时,要加上强制强制转换符,但可能造成精度降低或溢出;使用时要格外注意。 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。(看下页)(看下页) 实数常量(如:1.2)默认为 double。整数常量(如:123)默认为 int 。基本数据类
23、型转换TestConvert.java手把手教程 V3.0版权所有:尚学堂科技尚学堂多种类型的数据混合运算 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。 如果其中一个运算对象是double类型的另一个也会被转换成double类型。 否则,如果其中一个运算对象是float类型的,另一个也会被转换成float类型的。 否则,如果其中一个运算对象是long类型的,另一个也会被转换成long类型的。 否则,如果其中一个运算对象是int类型的,另一个也会被转换成int类型的。 否则,如果其中一个运算对象是short类型的,另一个也会被转换成shor
24、t类型的。 手把手教程 V3.0版权所有:尚学堂科技尚学堂void public method() int i=1,j; float f1=0.1; float f2=123; long l1 = 12345678,l2=8888888888; double d1 = 2e20,d2=124; byte b1 = 1,b2 = 2,b3 = 129; j = j+10; i = i/10; i = i*0.1; char c1=a,c2=125; byte b = b1-b2; char c = c1+c2-1; float f3 = f1+f2; float f4 = f1+f2*0.1;
25、double d = d1*i+j; float f = (float)(d1*5+d2); 课堂练习 说出下面程序片说出下面程序片断中编译错误或可能断中编译错误或可能产生计算溢出的部分产生计算溢出的部分课堂练习TestConvert2.java手把手教程 V3.0版权所有:尚学堂科技尚学堂程序格式 大括号对齐 遇到缩进,Tab/Shift+Tab 程序块之间加空行 并排语句之间加空格 运算符两侧加空格有特定条件 前面有空格 成对编程手把手教程 V3.0版权所有:尚学堂科技尚学堂运算符 Java 语言支持如下运算符: 算术运算符: +,-,*,/,%,+,- 关系运算符: ,=, 赋值运算符:
26、 = 扩展赋值运算符:+ =,- =,* =,/ = 字符串连接运算符:+ 手把手教程 V3.0版权所有:尚学堂科技尚学堂public class Test public static void main(String arg) int i1 = 10, i2 = 20; int i = i2+; System.out.print(i= + i); System.out.println( i2= + i2); i = +i2; System.out.print(i= + i); System.out.println( i2= + i2); i = -i1; System.out.print(i
27、= + i); System.out.println( i1= + i1); i = i1-; System.out.print(i= + i); System.out.println( i1= + i1); 自加和自减运算符输出:输出:i=20 i2=21i=22 i2=22i=9 i1=9i=9 i1=8 注意:注意:l +(-)+(-)l 在前时先运算再取值。在前时先运算再取值。l 在后时先取值再运算。在后时先取值再运算。手把手教程 V3.0版权所有:尚学堂科技尚学堂l逻辑运算符:!逻辑非 & 逻辑与 | 逻辑或 逻辑异或 & 短路与 | 短路或l&, |,! 逻辑运算符只能用于bool
28、ean身上。ab!aa&ba|baba&ba|btruetrue falsetruetruefalsetruetruetruefalsefalsefalsetruetruefalsetruefalsetruetruefalsetruetruefalsetruefalsefalsetruefalsefalsefalsefalsefalse逻辑运算符publicpublic classclass TestTest public public staticstatic voidvoid main(Stringmain(String args)args) boolean boolean a,b,c;a
29、,b,c; a a = = truetrue; b; b = = falsefalse; ; c c = = a a & & b;b; System.out.println(c);System.out.println(c); c c = = a a | | b; System.out.println(c);b; System.out.println(c); c c = = a a b; System.out.println(c);b; System.out.println(c); c c = = !a; System.out.println(c);!a; System.out.println(
30、c); c c = = a a & b;System.out.println(c);b;System.out.println(c); c c = = a a | b; System.out.println(c);b; System.out.println(c); public class Testpublic class Test public static void main(String args) public static void main(String args) int i=1,j=2; int i=1,j=2; boolean flag1 = (i3)&(i+j)5); boo
31、lean flag1 = (i3)&(i+j)5); /第二第二个个操作操作数将数将不再不再计计算算 boolean flag2 = (i2)|(i+j)6);boolean flag2 = (i2)|(i+j)6); /第二第二个个操作操作数将数将不再不再计计算算 手把手教程 V3.0版权所有:尚学堂科技尚学堂l 赋值运算符 (=) 当“=”两侧数据类型不一致时,可以适用默认类型转换或使用强制类型转换原则进行处理 long l = 100; int i = (int)l; 注意:可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范
32、围 byte b = 12; char c = 100; X byte bb = 256; X short s = -32769;赋值运算符与扩展赋值运算符运算符 用法举例 等效的表达式 += a += b a = a+b-= a -= b a = a-b*= a *= b a = a*b/= a /= b a = a/b%= a %= b a = a%b手把手教程 V3.0版权所有:尚学堂科技尚学堂字符串连接符 “+” 除用于算术加法运算外,还可用于对字符串进行连接操作int id = 800 + 90;String s = hello + world; “+”运算符两侧的操作数中只要有一个
33、是字符串运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另类型,系统会自动将另一个操作数转换为字符串然后再进行连接。一个操作数转换为字符串然后再进行连接。int c = 12;System.out.println(c= + c);手把手教程 V3.0版权所有:尚学堂科技尚学堂表达式 表达式是符合一定语法规则的运算符和操作数的序列 a 5.0 + a (a-b)*c-4 i30 & i%10!=0 表达式的类型和值 对表达式中操作数进行运算得到的结果称为表达式的值。 表达式值的数据类型即为表达式的类型 。 表达式的运算顺序 应按照运算符的优先级从高到低的顺序进行。 优先级
34、相同的运算符按照事先约定的结合方向进行。R to L. ( ) ; ,+ - ! (data type)L to R* / %L to R+ -L to R L to R = instanceofL to R= !=L to R&L to RL to R|L to R&L to R|R to L? :R to L = *= /= %= += -= = = &= = |=低低高高手把手教程 V3.0版权所有:尚学堂科技尚学堂 char c = (char)(Math.random()*26+a); Math.random()返回一个double值 所以26被转成double进行乘法运算,乘积是个
35、double 为了完成加法,a必须被转成double 最后获得的double再转成char 如果从29.7转成char,是30还是29? Math.random()输出01之间的数。0,1)手把手教程 V3.0版权所有:尚学堂科技尚学堂l “三目条件运算符,语法格式:x ? y : zl 其中 x 为 boolean 类型表达式,先计算 x 的值,若为true,则整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。l 举例:int score = 80; int x = -100;String type = score 0 ? 1 : (x = 0 ? 0 : -1);S
36、ystem.out.println(type= + type);System.out.println(flag= + flag);type= 及格及格flag= -1三目条件运算符手把手教程 V3.0版权所有:尚学堂科技尚学堂语句 条件语句 - 根据不同条件,执行不同语句。 if if . else if . else if if . else if . else if . else switch 循环语句 重复执行某些动作 for (JDK1.5语法) while do . while;手把手教程 V3.0版权所有:尚学堂科技尚学堂if语句 if if . else . if . else
37、if . if . else if . else if . if . else if . else if . else 只有一句需要执行的语句时,可以省略 ,但是不推荐省略 小心不要在if后面加 ; TestIF.java手把手教程 V3.0版权所有:尚学堂科技尚学堂for 循环语句lfor 语句为如下形式:for(表达式1; 表达式2; 表达式3) 语句; ; l执行过程首先计算表达式1,接着执行表达式2,若表达式2的值 = ture,则执行语句,接着计算表达式3,再判断表达式2的值;依此重复下去,直到表达式2的值=falsefor语句中三个表达式都可以省略JDK1.5新补充的for语法(后
38、面课程中补充,数组)=true=true表表达达式式2 2值值结结束束forfor语语句句计计算表算表达达式式3 3语语 句句计计算表算表达达式式1 1=false=falsepublic class Test public static void main(String args) long result = 0; long f = 1; for (int i = 1; i = 10; i+) f = f * i; result += f; System.out.println(result= + result); 计算 result = 1!+2!+10!课课 堂堂 练练 习习编写程序,用
39、一个编写程序,用一个 for 循环计算循环计算1+3+5+7 + + 99的值,并输的值,并输出计算结果出计算结果。(OddSum.java)手把手教程 V3.0版权所有:尚学堂科技尚学堂while & do while 语句 while 语句为如下形式: while(逻辑表达式) 语句; ; 执行过程 先判断逻辑表达式的值。若=true.则执行其后面的语句,然后再次判断条件并反复执行,直到条件不成立为止 while 语句为如下形式: do 语句; ; while(逻辑表达式); 执行过程 先执行语句,再判断逻辑表达式的值,若为true,再执行语句,否则结束循环。表达式值表达式值语语 句句结束
40、结束While 语句语句语语 句句表达式值表达式值结束结束do-While 语句语句TestWhile.java手把手教程 V3.0版权所有:尚学堂科技尚学堂变量的作用域 内部Scope.java手把手教程 V3.0版权所有:尚学堂科技尚学堂break & Continue 语句lbreak 语句用于终止某个语句块的执行。用在循环语句体中,可以强行退出循环;例如:public class Test public static void main(String args) int stop = 4; for (int i = 1; i = 10; i+) /当i等于stop时,退出循环 if (
41、i = stop) break; System.out.println( i= + i); i = 1i = 2i = 3lcontinue 语句用在循环语句体中,用于终止某次循环过程,跳过循环体中 continue 语句下面未执行的循环,开始下一次循环过程;例如:public class Test public static void main(String args) int skip = 4; for (int i = 1; i = 5; i+) /当i等于skip时,跳过当次循环 if (i = skip) continue; System.out.println(i = + i);
42、i = 1i = 2i = 3i = 5手把手教程 V3.0版权所有:尚学堂科技尚学堂循环语句举例/ 输出1100内前5个可以被3整除的数。public class Test public static void main(String args) int num = 0, i = 1; while (i = 100) if (i % 3 = 0) System.out.print(i + ); num+; if (num = 5) break; i+; /输出101200内的质数,public class Test public static void main(String args) f
43、or (int i=101; i200; i+=2) boolean f = true; for (int j = 2; j 2 )public class Test public static void main(String arg) System.out.println(f(5); public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); 课堂练习课堂练习试用非递归调用的方法解决上面试用非递归调用的方法解决上面 Fibonacci 数列问题数列问题Fab.java手把手
44、教程 V3.0版权所有:尚学堂科技尚学堂mainf5f4f3f2f1f2f3f2f1 public static int f(int n) if (n = 1 | n = 2) return 1; else return f(n - 1) + f(n - 2); 手把手教程 V3.0版权所有:尚学堂科技尚学堂123n1n2result手把手教程 V3.0版权所有:尚学堂科技尚学堂汉诺塔游戏的目标把 A杆上的金盘全部移到C杆上,并仍按原有顺序叠好。条件每次只能移动一个盘,并且在每次移动都不允许大盘移到小盘之上。编程要求利用递归调用技术给出N个盘从A杆移到C杆的移动过程。手把手教程 V3.0版权所
45、有:尚学堂科技尚学堂汉诺塔HANOI(N,A,B,C)1.以C盘为临时杆,从A杆将1至N-1号盘移至B杆。HANOI(N-1,A,C,B)2.将A杆中剩下的第N号盘移至C杆。3.以A杆为临时杆,从B杆将1至N-1号盘移至C杆。HANOI(N-1,B,A,C)手把手教程 V3.0版权所有:尚学堂科技尚学堂汉诺塔参考代码1.以C盘为临时杆,从A杆将1 至N-1 号盘移至B 杆。2.将A杆中剩下的第N 号盘移至C杆。3.以A杆为临时杆,从B杆将1 至N-1 号盘移至C 杆。public class Testpublic static void main(String args)Test t = ne
46、w Test();t.hanoi(3,A,B,C);public void hanoi(int num,char a,char b,char c)if(num = 0) return;this.hanoi(num-1,a,c,b);System.out.println(move plate p + num + from + a + to + c);this.hanoi(num-1,b,a,c);手把手教程 V3.0版权所有:尚学堂科技尚学堂hanoi(3,a,b,c)hanoi(2,a,c,b)move 3 from a to chanoi(2,b,a,c)hanoi(1,a,c,b)move
47、 2 from a to chanoi(1,b,a,c)hanoi(1,a,c,b)move 2 from a to chanoi(1,b,a,c)hanoi(0,a,c,b)move 1 from a to chanoi(0,b,a,c)hanoi(0,a,c,b)move 1 from a to chanoi(0,b,a,c)hanoi(0,a,c,b)move 1 from a to chanoi(0,b,a,c)hanoi(0,a,c,b)move 1 from a to chanoi(0,b,a,c)if (num = 0)return;if (num = 0)return;if (
48、num = 0)return;if (num = 0)return;if (num = 0)return;if (num = 0)return;if (num = 0)return;if (num = 0)return;手把手教程 V3.0版权所有:尚学堂科技尚学堂 Classpath 程序格式的视频是否看了 别使用UtralEdit运行java 递归,想象成又拷贝了一份方法,当前方法由于没有确定的值,尚没有返回 UltraEdit有没有高亮显示?尚学堂 手把手教程 V3.0授课:张志宇授课:张志宇版权所有:尚学堂科技第三章:J2SE 之 面向对象编程手把手教程 V3.0版权所有:尚学堂科技尚
49、学堂本章内容 编程语言的发展 面向过程的设计思想 面向对象的设计思想 对象和类的概念 类之间的关系 对象和引用 Java 类的定义 构造函数 对象的创建和使用 this 关键字 static 关键字 package 和 import 语句 访问控制 类的继承 方法的重写 Object类 对象转型 多态 抽象类 接口手把手教程 V3.0版权所有:尚学堂科技尚学堂编程语言的发展 机器语言直接由计算机的指令组成,指令、数据、地址都以“0”和“1”的符合串组成;可以被计算机直接执行。 汇编语言用容易理解和记忆的符号表示指令、数据以及寄存器等,抽象层次很低,程序员需要考虑大量的机器细节。 高级语言屏蔽了
50、机器细节,提高了语言的抽象层次接近于人的自然语言,60年代出现的结构化编程语言提出了结构化数据和语句,数据和过程抽象等概念。 面向对象的语言与已往的各种语言的根本不同是,它的设计出发点就是为了更能直接的描述问题域中客观存在的事物。语言的发展是朝着人类更容易理解的方向前进手把手教程 V3.0版权所有:尚学堂科技尚学堂面向对象编程语言三大特征 隐藏/封装 继承 多态手把手教程 V3.0版权所有:尚学堂科技尚学堂面向过程的设计思想和面向对象的设计思想 我要去新疆 面向过程 我开车,我挂档,我踩油门,我过河北,我过陕西 面向对象 我命令车去新疆 车怎么去不关我事 信息封装在车这个类的内部 我不用去了解
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。