1 / 83

本 PPT 讲述了 JAVA 的基础知识 由于 JAVA 和 C 本身很接近 , 所以本 PPT 主要侧重于说明两者的区别

声明. 本 PPT 讲述了 JAVA 的基础知识 由于 JAVA 和 C 本身很接近 , 所以本 PPT 主要侧重于说明两者的区别 制作这个 PPT 的目的 : 力图大家可以从对比中轻松的掌握 JAVA 语言 本 PPT 配有一些例子程序,都比较短小,适合大家直接用记事本直接编写. 内容. 第一章 初识 JAVA 第二章 JAVA 的基本元素 第三章 类 第四章 其他操作. 第 1 章 初识 JAVA. 第 1 章 初识 JAVA. JAVA 简介 JAVA 程序的执行 JAVA 的安装 第一个 JAVA 程序. JAVA 简介.

eadoin
Télécharger la présentation

本 PPT 讲述了 JAVA 的基础知识 由于 JAVA 和 C 本身很接近 , 所以本 PPT 主要侧重于说明两者的区别

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 声明 • 本PPT讲述了JAVA的基础知识 • 由于JAVA和C本身很接近,所以本PPT主要侧重于说明两者的区别 • 制作这个PPT的目的: 力图大家可以从对比中轻松的掌握JAVA语言 • 本PPT 配有一些例子程序,都比较短小,适合大家直接用记事本直接编写

  2. 内容 • 第一章 初识 JAVA • 第二章 JAVA的基本元素 • 第三章 类 • 第四章 其他操作

  3. 第1章 初识JAVA

  4. 第1章 初识JAVA • JAVA 简介 • JAVA 程序的执行 • JAVA 的安装 • 第一个JAVA 程序

  5. JAVA 简介 • JAVA 是一种完全面向对象的程序 • JAVA 程序中只有类,而C++中可以没有类 • JAVA 程序分类 • JAVA 应用程序 • JAVA Applet

  6. JAVA程序的执行 • JAVA程序的执行原理是:先将源代码编译为字节代码(.class文件) • 然后字节代码可以在JAVA虚拟机(JVM Java Virtual Machine)上解释执行

  7. JAVA 的安装 • JAVA 的安装 • JAVA 环境变量的设置

  8. 下载安装 JDK 官方下载地址 http://java.sun.com/javase/downloads/index.jsp 可以选择 JDK6 的安装包 TIPS:安装的时候会提示您选择安装在什么目录下, 建议安装路径不要有空格, 所以不宜安装在\Program Files目录下

  9. 环境变量设置 安装完JDK 之后需要进行系统环境变量的设置 右键点我的电脑,选择属性->高级->环境变量 假如JDK安装的目录是C:\jdk1.6 • 添加一个名为JAVA_HOME的系统变量,值为C:\jdk1.6 • 然后在PATH这个变量的最后 加入 ;%JAVA_HOME%\bin • 加入CLASSPATH这个变量 其值为空的 需要设置这个环境变量,不过它的值是空的!不然可能运行的时候会出错.

  10. 第一个JAVA程序 现在可以用记事本敲一个JAVA程序了,先来个HelloWorld程序 代码如下: (HelloWorld.java) public class HelloWorld { public static void main(String [] args) { System.out.println("Hello World"); } }

  11. 第一个JAVA程序 运行方法: 开始菜单->运行->cmd 去到JAVA文件的目录下(例如我的电脑是C:\java) 执行以下命令: • C:\java>javac HelloWorld.java • C:\java>java HelloWorld 一切正常的话,您将可以看到Hello World 这行字 如果出现任何异常, 请看本PPT下一页的建议

  12. 说明 • JAVA程序中, 类名要与文件名一致 • 例如HelloWorld 程序中,类的名字是HelloWorld,那么保存文件的时候,就应该保存为HelloWorld.java • 执行的时候需要使用javac将源代码转化为字节代码,其执行语句是 javac 类名.java (执行结果将产生.class文件) • 真正执行程序的语句是 java 类名 (该句将执行该类的main函数)

  13. 第2章 JAVA基本元素

  14. 第2章 JAVA基本元素 大家可以看到JAVA 程序与C++程序非常相似,只是一些细节上的不同。由于大家对C++都已经非常熟悉,所以下面主要讲述的是他们的区别 本章讲述的内容有: • JAVA 程序框架 • JAVA 数据类型 • JAVA 表达式 • JAVA 对象和引用变量 • JAVA 的String类 • JAVA 的输入输出 • JAVA 中的方法 • JAVA 的方法中的参数传递方式 • JAVA 数组 • JAVA 包的使用

  15. JAVA 程序框架 如何才能创建一个JAVA应用程序呢? 我们先来看看 HelloWorld 程序的意义 • 第一行public class HelloWorld 它定义了一个类,public表示可以被外部访问,它的意义以后还会解释 • 第二行public static void main(String [] args) 这是这个类的主函数,程序将从这个地方开始执行 • main中的语句是输出一个字符串

  16. JAVA 程序框架 • 一个java文件只能有一个声明为public的类,而且这个类的类名应该与主文件名一致 • 类中必须有一个 public static void main 方法 这是程序执行的起点 注:以上都是针对只有一个java源代码文件的程序而言的, 多个源代码文件的情况以后再做说明

  17. 数据类型 JAVA 的数据类型分为两大类 • 简单数据类型(共8种) • 除了上面的几种外,JAVA中只存在类,类对象的定义全部是引用变量 (注:我在后面的描述中,把除了简单数据类型之外的数据类型称为“对象数据类型”) 它们有着本质的区别,主要是内存分配方式不不同. 它们的区别将在本章的 “JAVA 对象和引用变量” 一节中进行叙述

  18. 简单数据类型 简单数据类型有3个大类 分别是: • 整数数据类型 • 浮点数据类型 • 布尔数据类型

  19. 整数数据类型 • char 0 ~ 65535 • byte -128 ~ 127 • short -32768 ~ 32767 • int -2^31 ~ 2^31-1 • long -2^63 ~ 2^63-1 char类型对应的是Unicode 字符集,其中 0-127 对应了我们常用的ASCII码.该类型C++中的使用方法在Java中是可行的,只是它在JAVA中可以覆盖更多的字符

  20. 浮点数据类型 • float -3.4E+38 ~ 3.4E+38 • double -1.7E+308 ~ 1.7E+308 • 布尔类型 • boolean 其值为true 或者 false 简单数据类型就只有上面介绍的3大类共8种

  21. 表达式及表达式计算 表达式计算的优先顺序,运算符的优先顺序,类型强制转换及隐式转换的规则与C++完全一样。 举例: • (4+7)*(45/7) • (4+7)*((double)45/7)

  22. JAVA 对象和引用变量 • 简单数据类型只有前面那8种,和C++很类似 • 对象数据类型定义的变量则是“指向类对象的引用”,这种变量是“引用变量” • 简单数据类型与对象数据类型有本质的区别 • 简单数据类型定义的是一个“变量”,它的内存空间是在定义的时候就分配的 • 对象数据类型定义的是某个类的一个“引用变量”,它仅仅是一个指针. 该类变量需要使用new运算符进行内存分配. 在分配空间以后, 该“引用变量”就指向了这片申请的空间的地址。

  23. 例子 先用一个例子来说明 简单数据类型中有int类型 JAVA系统中还定义了一个与之对应的类: Integer 考虑以下语句: int x; x=30; Integer y; y=new Integer(67);

  24. X X 30 地址 Integer对象 2700 2700 67 X X的值

  25. 简单数据类型 int x; 在定义的时候,就为x分配了内存空间 x=30 语句是对x进行赋值 • 对象数据类型 Integer y; 这句话声明的是一个指向Integer 对象的引用。它定义时并不分配内存,其实它的变量只是一个指针(即该变量存储的只是一个地址) 执行y=new Integer(67); 一句时才为它分配指向Integer类型的内存空间 在这里y是“引用变量” • 补充:有人说,JAVA是一种没有指针的语言 我想正确的理解应该是:JAVA是有指针的,只是它在 内部为你工作,对程序员是透明的。但是由于程序员 不能直接进行指针操作,所以JAVA数据处理的灵活性 要低于C++

  26. 几种对象数据类型 • 与8种基本数据类型相对应,java系统中定义了8种相应的对象数据类型,分别为:Character Byte Short Integer Long Float Double Boolean

  27. String类 • String 类是JAVA最重要的类之一 在输入输出等很多地方都需要用到它 • 定义 String name; name=“Rhode”; • 以上第2行等价于 name=new String(“Rhode”); 因为String类中定义了一个“=”赋值运算符,所以使用String类的时候,可以不使用new运算符

  28. String 类的用法 String 类重载了很多运算符,使用方便 • String s1 , s2 , t; • s1=“My”; • s2=“Book”; • t=s1+s2; // MyBook • int i=3; • t=s1+i; // My3 一些特殊的例子 n1=12; n2=3; String str; str=“Sum : ”+n1+n2; // 执行后 str=“Sum : 123”; str=“Sum : ”+(n1+n2); // 执行后 str=“Sum : 15”; str=n1+n2+”is the Sum” // 执行后 str=15+“is the Sum”; 执行顺序从左向右,加法执行是整数相加

  29. String 类常用的方法 • 举例 str=“The book”; • char charAt (int index) 取第index个字符 • int compareTo (String str1); 与str1比较大小,返回 比较的值,功能与 C++中strcmp类似 • String concat (String str1); 把str1加到原字符串上 • boolean equals (String str1); 比较两个字符串是否相同,返回 值为true 或者 false • int length (); 返回字符串的长度 • String substring(int s, int l) 返回从第s个字符到第l 个字符的子串 • String toUpperCase(); 返回全部转化为大写字母 的字符串 • String toLowerCase(); 返回全部转化为小写字母 的字符串

  30. String 对象的理解 这是类的对象,它的变量是“引用变量” 是指向String对象的指针 地址 String对象 1300 1300 Rhode name name的值

  31. 加深理解 • 比较两个字符串是否相等 现在有定义如下: String str1=new String(“abc”); String str2=new String(“abc”); String str3=str1; 语句1:if (str1==str2) 语句2:if (str1.equals(str2)) 语句3:if (str1==str3) 以上2个语句是不同的,我们说过str1,str2叫引用变量,这样的变量是只是一个“引用”,它的内涵你可以理解为指针,也就是地址。 • 由于str1,str2分配不同的空间,他们地址不同,所以语句1返回false • 真正的字符串内容的比较用的是语句2,他的值是true • 由于str1,str3他们指向了同一个对象(即他们的地址相同),所以语句3返回true

  32. String类常用的转换 • 将String 类转化为int 或者 double 等类型的方法:使用Integer类或者Double类的静态方法来转化,举例: • 转化为 int int x = Integer.ParseInt(“45”); // 执行后 x=45 • 转化为 double double x = Double.ParseDouble(“7.5”); // 执行后 x=7.5 • 将int或者double 转化为String 比较简单,可以利用 String类提供的运算符来巧妙的转化: 例如:将int装化为String 可以用下面的语句 int x; String str = “”+x;

  33. JAVA的输入输出 JAVA写控制台程序的输入需要自己处理JAVA提供的只是输入的字符流处理 我们需要定义一个InputStreamReader对象和一个BufferdReader 对象,这样我们可以获得需要的字符串,如果需要再将字符串转化为整数或者浮点数。 具体做法如下:

  34. JAVA的输入 • 首先定义一个InputStreamReader对象和一个BufferdReader对象如下: • InputStreamReader charReader= new InputStreamReader(System.in); • BufferdReader keyboard= new BufferdReader(charReader); 以上两句可以合并写为下面这一句: BufferedReader keyboard =new BufferedReader (new InputStreamReader(System.in));

  35. 有了上面的定义后,就可以进行以下操怍 • 读入单个字符 ch=(char)keyboard.read(); • 读入整行的字符串 str=keyboard.readLine(); • 读入整数 num=Integer.parseInt (keyboard.readLine()); • 读入浮点数 dbnum=Double.parseDouble (keyboard.readLine()) 可以看出,输入操作只能得到字符流 如果要获得数字的输入,还需要自己转换

  36. JAVA输出 • 输出的语句是 • System.out.println(String str); • System.out.print(String str); • System.out.flush(); // 清空缓冲区 • 输出举例 • 字符串输出: System.out.println(“Hello”); • 整数变量输出: System.out.println(“”+i);

  37. 综合例子 • 输入一个数字,输出它的2倍,并输出它个位的数字 (ReadWrite.java) • import java.io.*; • public class ReadWrite • { • public static void main(String [] args) throws IOException • { • BufferedReader key=new BufferedReader (new InputStreamReader(System.in)); • String st=key.readLine(); • int num=Integer.parseInt(st); • System.out.println("它的两倍是:"+num*2); • System.out.println("个位是: "+st.charAt(st.length()-1)); • } • }

  38. 程序说明 • InputStreamReader 和 BufferedReader 这两个类包含在java.io这个包中 所以程序第一句需要引用这个包 • main 函数定义的最后 throws IOException 这是因为IO输入有可能出错,JAVA要求对错误抛出异常. 如果没有这个部分,编译将不能通过

  39. 令牌化输入 • 前面的输入中,只能够每次读入一行 • 如果想输入多个整数(这N个整数可以在一行 内输入并用空格隔开,也可以分行输入,并且这些数字用空格隔开),要怎么做呢 ? • 实现这样的以空格为分界的输入就需要下面的令牌化输入方法 • 令牌的意义我们可以看作是每两个空格分隔符间的字符串 • 令牌化输入由StringTokenizer 这个类实现,它的使用需要引用java.util这个包

  40. 其使用方法如下: • 设置一个令牌字符串对象,不断读入 它的 nextToken() 方法可以获得下一个空格以前的字符串 它的hasMoreToken() 方法可以判断还有没有令牌 • 使用: StringTokenizer k; k=new StringTokenizer(keyboard.readLine()); while (输入的停止条件不成立) { number=Integer.parseInt(k.nextToken()); if (!k.hasMoreToken()) k=new StringTokenizer(keyboard.readLine()); }

  41. 格式化输出 • 对浮点数进行格式化输出需要使用DecimalFormat类的对象, 它在java.text包中 • 使用方法: • DecimalFormat df=new DecimailFormat(“0.00”); 格式化小数点后2位 • DecimalFormat df=new DecimailFormat(“0.##”);格式化小数点后2位,末尾的0用空格填空 例如 df.format(45.75367) 将会返回 45.75

  42. 综合例子 • 不断的输入浮点数字 • 如果输入的数字等于0,则程序结束; • 如果输入的数字不等于0,则将浮点数规范化为2位小数输出 (UseToken.java) • import java.io.*; • import java.util.*; • import java.text.*; • public class UseToken • { • public static void main (String [] args) throws IOException • { • BufferedReader keyboard=new BufferedReader (new InputStreamReader(System.in)); • DecimalFormat df=new DecimalFormat("0.00");

  43. String t; • StringTokenizer k; • k=new StringTokenizer(keyboard.readLine()); • t=k.nextToken(); • while (!t.equals("0")) • { • double num; • num=Double.parseDouble(t); • System.out.println(""+df.format(num)); • if (!k.hasMoreTokens()) • k=new StringTokenizer(keyboard.readLine()); • t=k.nextToken(); • } • } • }

  44. JAVA 中的方法 • 对简单数据类型来说, 以下几点均与C++一致, 不再赘述 • 运算符 ( 包括四则运算、比较运算、优先顺序、强制转换等 ) • 选择结构 (if , if …else , switch) • 循环语句(for, while , do…while, break, continue) • C++中有函数的概念,它可以游离于类之外,而JAVA中不可以存在这样的函数 • C++中的类有成员函数的概念,JAVA中也有, 在JAVA中将其称为“方法”

  45. 一些概念 public int absf(float a) { if (a>0) return a; else return -a; } 这是一个JAVA类的方法的例子 我们把其中public int absf(float a)称为方法的“题头”,方法名后面是“形参列表” 题开最开始的地方是限定词,限定词包括3组: • public, private, protected • static, abstract • final 每一组中都可以选择一个加到方法题头前面表示某种意义,具体含义在“类”一章中讲述

  46. JAVA的方法中的参数传递方式 • JAVA参数传递方式是按值传递,程序首先为形参分配一个空间,再把实参复制到形参中 ( 这是跟C++不同的地方,C++可以有按地址传递) • 对于简单数据类型, 在方法中对形参的改变不会影响实参的值 • 对于对象数据类型(引用变量), 形参和实参位于两个不同的内存空间,但是他们都是对同一个对象的引用

  47. JAVA的按值传递带来了一些问题 例如,我们需要写一个方法实现交换2个简单数据类型的整形变量的值, JAVA就没有比较简单的办法. • 下面是我自己写过的一个错误的例子 • 我开始认为对象数据类型是指向类对象的引用, 和C++类似,所以可以采用与C++类似的方法来实现2个数字的交换,于是写了下面一个错误的版本

  48. 错误版本 • public class MethodSpecial • { • public static void main(String [] args) • { • Integer A=new Integer(2); • Integer B=new Integer(4); • swap(A,B); • System.out.println("A="+A); • System.out.println("B="+B); • } • static void swap(Integer i,Integer j) • { • Integer k; • k=i; i=j; j=k; • } • }

  49. JAVA将会这样运行程序: • 先生成了A,B的值, 分别是2和4 • swap被调用的时候, 程序首先为形参分配一个空间,再把实参复制到形参中(副本). 此时, i 和A同时指向了Integer(2)的地址, j和B同时指向了Integer(4)的地址, 不过i与A这两变量存放在不同的内存空间, j与B这两变量也存放在不同的内存空间 • swap调用完后, i指向了Integer(4)的地址, j指向了Integer(2)的地址, 这个没有错误, 也没有问题, 不过i的地址并不是A的地址, 所以A,B没有改变过. • 而如果是C++使用指针进行交换, 那么i和A 是属于同一片内存,当i和j的值调换时, 就是调换了A,B的值 ( 即调换了A,B所指向的内存的位置 ) • 区别在于引用 ——在 C++ 中当传递给函数的参数是引用时,传递的就是这个引用,或者内存地址(按引用传递)。在 Java 应用程序中,当对象引用传递给方法的一个参数时,传递的是该引用的一个副本(按值传递),而不是引用本身。 • 实现swap功能的原理如下: 改变形参(同时也是实参)所指向的内存空间的值. 这样,方法调用结束后, 实参所指向的内存空间的值就改变了 • 具体实现的时候, 我们需要自己定义一个类IntClass 来完成任务, 必须自己定义一个类的原因是Integer类没有提供赋值的操作

  50. ( MethodSpecial.java) • public class MethodSpecial • { • public static void main(String [] args) • { • IntClass A=new IntClass(2); • IntClass B=new IntClass(4); • swap(A,B); • System.out.println("A="+A.getNum()); • System.out.println("B="+B.getNum()); • } • static void swap(IntClass i,IntClass j) • { • int k; • k=i.getNum(); • i.setNum(j.getNum()); • j.setNum(k); • } • } • class IntClass • { • public int x; • public IntClass(int t) {x=t;} • public int getNum() {return x;} • public void setNum(int t) {x=t;} • }

More Related