收藏 分享(赏)

java_base1_lang.ppt

上传人:kpmy5893 文档编号:7069873 上传时间:2019-05-05 格式:PPT 页数:59 大小:835.50KB
下载 相关 举报
java_base1_lang.ppt_第1页
第1页 / 共59页
java_base1_lang.ppt_第2页
第2页 / 共59页
java_base1_lang.ppt_第3页
第3页 / 共59页
java_base1_lang.ppt_第4页
第4页 / 共59页
java_base1_lang.ppt_第5页
第5页 / 共59页
点击查看更多>>
资源描述

1、,系统学习Java面向对象语言 成为一名熟练的Java程序员 帮助获得SCJP证书配套教材:Java面向对象编程 技术支持网址:www.javathinker.org 讲解:孙卫琴 linda_,Java 编程培训讲义,最经典畅销的Java编程书籍,本培训讲义自2007年在各大网站上免费公布后,截止2008/10,下载量已经达30万次。,点击此喇叭收听语音讲解,第1课 起 步,描述Java编程语言的主要特性 描述Java虚拟机的主要功能 描述垃圾收集是如何进行的 列举Java虚拟机在运行时所执行的三大任务 定义Class,Package和Application 编写、编译并运行简单Java应用

2、程序 了解JavaDoc文档的作用 了解java. lang包,参照Java面向对象编程的第二章(第一个Java应用),Java编程语言的主要特性,面向对象 可移植性, 跨平台 支持分布式的网络应用 安全性和健壮性,Java类(.class文件),Java虚拟机,Java虚拟机,Windows,Unix,Java客户程序,Java服务器程序,网络,万物皆对象,Java虚拟机,概念 Java虚拟机(Java Virtual Machine)在实际的计算机上通过软件模拟来实现。 Java虚拟机有自己想象中的硬件。 功能 提供垃圾回收功能 提供运行时环境,提供运行时环境,执行三大任务加载代码 校验代

3、码 执行代码,一个Java应用程序,/* * HelloWorldApp.java */ public class HelloWorldApp public static void main (String args) System.out.println (“Hello World!“); ,类和包介绍,类(class)是描述提供某种功能的模块,类是对象的模版。 类被划分到不同的包(package)中,每个包都包含几个类。 JDK的Java类库中的几个重要包: java.lang, java.io, java.awt , , java.util,学生小张,学生小王,孙老师,陈老师,客户小红

4、,客户小芳,售货员小丁,售货员小东,Student类,Teacher类,Customer类,Seller类,myapp.school包,myapp.store包,对象,Java源文件布局,包含三个“顶级”要素 package声明语句 import引入语句 类声明语句 每一个源文件中最多只能有一个公共访问类(用public修饰的类),-B.java- package b; / package声明语句import a .*; / import引入语句,或者import a.A;public class B /类声明语句public static void main(String args)A a;

5、 /access class Aa=new A();,源文件布局,例题:Which of the following will compile without error ? a)import java.awt.*; package mypackage; class Myclass b)package myPackage; import java.awt.*; class MyClassc) /*This is a comment */ package myPackage; import java.awt.*; public class MyClass,程序入口main()方法的声明,以下两种

6、方式是合法的main()方法声明: 1. public static void main(String args) 2.static public void main(String args),public class HelloWorldpublic static int main(String args)System.out.println(“hello world“);return 0; ,程序入口main()方法的声明,例题:Which declarations for the main() method in a stand-alone program are NOT valid?

7、a) public static void main() b) public static void main(String string) c) public static void main(String args) d) static public int main(String args) e) static void main(String args),JDK简介,下载JDK: http:/ JDK 是Java Development Kit(Java开发工具包)的缩写。它为Java应用程序提供了基本的开发和运行环境。目前JDK的最成熟的版本为JDK1.5,也称为JDK5.0,它还有

8、一个吸引人的商业名叫Tiger。 JDK主要包括以下内容: Java虚拟机:负责解析和执行Java程序。Java虚拟机可以运行在各种操作系统平台上。 JDK类库:提供了最基础的Java类以及各种实用类。java.lang、java.io、java.util、java.awt、javax.swing和java.sql包中的类都位于JDK类库中。 开发工具:这些开发工具都是可执行程序,主要包括:javac.exe(编译工具)、java.exe(运行工具)、javadoc.exe(生成JavaDoc文档的工具)和jar.exe(打包工具)等。,安装JDK,在本地机器上安装JDK 假定JDK安装到本地

9、后的根目录为,在bin目录下提供了以下工具: javac.exe :Java编译器,把Java源文件编译成Java类文件。 jar.exe : Java应用的打包工具。 java.exe : 运行Java程序。 javadoc.exe :JavaDoc文档生成器。 为了便于在DOS命令行下直接运行这些工具,可以把/bin目录添加到操作系统的系统环境变量PATH变量中。,练习1:编译并运行如下代码,public class HelloWorldApp public static void main (String args) System.out.println (“Hello World!“)

10、; ,HelloWorldApp.java,HelloWorldApp.class,javac HelloWorldApp.java,练习2:编译并运行如下代码,public class ParamTesterpublic static void main(String argv)System.out.println(argv0); System.out.println(argv1); 运行程序的命令为:java ParamTester good morning *理解命令行参数的传递,练习3:编译并运行如下代码,编译并运行A.java,B.java,B.class,A.class,B.cla

11、ss,package a,package b,/* A.java */package a;public class Apublic A()System.out.println(“new Instance of A“);,/* B.java */package b;import a .*; /import package apublic class Bpublic static void main(String args)A a; /access class Aa=new A();,练习3:编译并运行如下代码,编译并运行A.java,B.java理解包的结构和目录的对应关系,会使用java, j

12、avac命令的参数选项,examples,src,classes,a,b,a,b,A.java,B.java,A.class,B.class,练习3:编译并运行如下代码,通过JDK来编译和运行的命令如下: 在当前目录下输入命令: javac -sourcepath src -d classes srcbB.java java -classpath classes b.B,第2课 标识符、关键字和数据类型,区分有效和无效标识符确认Java关键字列出八个基本类型为数字类型和String类型定义文字值为一个简单的包含基本类型成员变量的类创建一个类定义使用new构造一个对象描述默认初始化使用点符号访问

13、一个对象的成员变量,参照Java面向对象编程的第3章(数据类型和变量),注释,有三种插入注释的风格:/comment on one line/* comment on one or more line */* documenting comment */,javadoc注释,以“/*”开始,以“*/”结束。 javadoc命令只处理源文件中在类、接口定义、方法、变量、构造器之前的注释.例:运行javadoc MyHelloworld.java,/* * 在main( )方法中使用的字符串 * see #main(java.lang.String) */ private static Strin

14、g sDisplay=“HelloWorld“;/* * 显示HelloWorld * param args 从命令行中 */ mvvv public static void main(String args),javadoc MyHelloworld.java,关键字,Java语言的关键字有:abstract、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、extends、false、final、finally、float、for、if、implements、import、instanceof、

15、int、interface、long、native、new、null、package、private、protected、public、return、short、static、super、switch、synchronized、this、throw、throws、transient、true、try、void、volatile、while。 Java语言保留字有:const、goto。 区分Java关键字和其他语言的关键字(sizeof, friendly,NULL,String),标识符,标识符的规则($123, _param1 ): 首字母只能是a-z、A-Z、$或者_ 其余字母只能是a-

16、z、A-Z、$、_或者数字例题:Which of the following identifiers are ILLEGAL? a) _underscore b) 5Interstate c) Interstate5 d) _5_,Java数据类型,基本类型 逻辑类 boolean 字符类 char 整数类 byte, short, int, long 浮点类 double, float 引用类型 对象引用类型 数组引用类型,基本类型的取值范围,boolean isMarried=true; int age=18; char grade=A; double price=44.13;,直接数(l

17、iteral value),直接数就是直接显式赋给某个变量的 具体数值。共有7种类型的直接数:int型直接数(1, 1567) long型直接数(22L,22l) float型直接数(234.5F,1.3f) double型直接数(234.5 , 235.6D,11.0d) boolean型直接数(true, false) char型直接数(a, u000F) String型直接数(“hello”),int score=99; long length=100L; float weight=14.12F; char sex=M; String name=“Tom”;,字符的16进制Unicode

18、编码,引用类型,对象引用类型 数组引用类型Student tom; tom=new Student(); int intArray=new int3; int age=18;,用new关键字创建对象,第一步:分配内存空间 第二步:初始化为其变量类型的默认值 第三步:调用构造方法 第四步:返回对象实例的引用public class Samplebyte memberV1;int memberV2;public Sample() memberV2=2; /构造方法public static void main(String args)Sample s=new Sample();,堆区,Sample

19、对象memberV1(占1个字节,值为0) memberV2(占4个字节,值为2),引用变量S,数组,1. 声明 int intArray; 或者int intArray;2. 构造 intArray=new int3;3初始化 for(int i=0;i3;i+)intArrayii; 等价于:int intArray= new int 0,1,3;等价于: int intArray= 0,1,3;,堆区,int数组int0(占4个字节,值为0) int1(占4个字节,值为0) int2(占4个字节,值为0),引用变量intArray,int intArray3; /非法的数组声明,new语

20、句的作用,左边三步等价于: int intArray=new int0,1,2; 或者: int intArray= 0,1,2;,多维数组,String arrays=new String2; arrays0=new String1; arrays1=new String3; arrays00=“example1”; arrays10=“example2”; arrays11=“example3”;,堆区,arrays0,arrays1,arrays00,”example1”,”example2”,”example3”,arrays10,arrays11,arrays12=null,arra

21、ys引用变量,数组的特性,数组的索引从0开始, length-1结束。 公共属性变量length例1:What will happen if you try to compile and run the following code? public class Q public static void main(String argv)int a=new int1,2,3;System.out.println(a1);System.out.println(aa.length-1); ,变量的默认值,在创建一个类的对象时,Java 会自动为它的成员变量初始化 为默认值。 数值型变量的默认值(0)

22、 字符型的默认值(u0000) 布尔型的默认值(false) 引用类型的默认值(null)。 一个数组变量的默认值(null) 数组的所有元素初始化为其相应类型的默认值。,public class Sampleint v1;boolean v2;Sample v3;long v4=new long3;String v5=new String3;public static void main(String args)Sample sam=new Sample();System.out.println(sam.v1); System.out.println(sam.v2);System.out.p

23、rintln(sam.v3);System.out.println(sam.v40);System.out.println(sam.v50); ,第3课 表达式和流程控制,区分成员变量和局部变量 描述成员变量是如何被初始化的 辨认、描述并使用Java操作符 区分合法和非法基本类型赋值 理解赋值兼容性的规律 使用if, switch,for,while和do句型结构 用break和continue控制循环流程,参照Java面向对象编程的第3、4和5章,变量的作用域,成员变量:在类中声明,它的作用域是整个类。 局部变量:在一个方法的内部或方法的一个代码块的内部声明。如果在一个方法内部声明,它的作用

24、域是整个方法;如果在一个方法的某个代码块的内部声明,它的作用域是这个代码块。代码块是指位于一对大括号以内的代码。 方法参数:方法或者构造方法的参数,它的作用域是整个方法或者构造方法。,class Scopeint x; /成员变量int y; /成员变量Scope(int x)int y=2;int z=3;this.x=x; /this.x代表成员变量x this.y=y; /this.y代表成员变量y x=0;y=0;public static void main(String args)Scope s=new Scope(1);System.out.println(s.x);System

25、.out.println(s.y); System.out.println(s.z); /编译出错 ,变量的初始化,成员变量会自动初始化 局部变量必须显式初始化再使用,class Sampleint v1;boolean v2;public static void main(String args)Sample s=new Sample();System.out.println(s.v1);System.out.println(s.v2); ,public void doComputation() int x = (int)(Math.random() * 100); int y; int z

26、; if (x 50) y = 9; z = y + x; / Possible use before initialization ,操作符,操作符进行算术或符号右移位。 操作符是不带符号右移位操作符。 操作符执行一个左移位 短路(short circuit)操作符与非短路操作符 字符串操作符+ 操作符 = 和对象的equals()方法(File,Date,String,包装类覆盖了equals(),右移位操作符,int a1= 12 1; /变量a1的取值为6 int a2=-12 2; /变量a2的取值为-3 int a3= 128 2; /变量a3的取值为32 int a4= 129

27、2; /变量a4的取值为32,逻辑右移位操作符,int a1= 12 1; /变量a1的取值为6 int a2=-12 2; /变量a2的取值为1073741821,左移位操作符,int a1= 12 1; /变量a1的取值为24 int a2=-12 2; /变量a2的取值为-48 int a3= 128 2; /变量a3的取值为512 int a4= 129 2; /变量a4的取值为516,短路(short circuit)操作符和非短路操作符,“ ,等价于:output=output+10,字符串操作符 例题:which of the following are valid?,Strin

28、g s1= “ Hello“+ “World“; /s1= “HelloWorld“String s2=“Age:“+1; /s2= “Age:1“String s3=“Age:“+new Integer(1); /s3= “Age:1“String s4=“Answer :“ +true; /s4= “Answer:true“String s5=“Answer :“ +new Boolean(“true“); /s5= “Answer:true“String s6=5+1+ “1“ +new Integer(1)+ 2 +4+ new Long(11);String s7=5+new Int

29、eger(1)+ “2“ +4+ new Long(11); /编译出错,System.out.println(5+1+“1“+new Integer(1)+ 2 +4+ new Long(11); /打印6112411 以下表达式的执行步骤如下: (1)5+1 6 /数学加法操作符 (2)6+“1“ “61“ /字符串连接操作符 (3)“61“+new Integer(1) “611“ /字符串连接操作符 (4)“611“+2 “6112“ /字符串连接操作符 (5)“6112“+4 “61124“ /字符串连接操作符 (6)“61124“+new Long(11) “6112411“ /字

30、符串连接操作符,操作符=,int a=1; int b=1;Integer int1=new Integer(1); Integer int2=new Integer(1); Integer int3=int1; /int3和int1引用同一个对象int array1=new int1; int array2=new int1; int array3=array1; /array3和array1引用同一个数组System.out.println(“ a=b is “+(a=b); System.out.println(“int1=int2 is “+( int1=int2); System.o

31、ut.println(“int1=int3 is “+( int1=int3); System.out.println(“array1=array2 is “+(array1=array2); System.out.println(“array1=array3 is “+(array1=array3);,程序打印结果如下: A=b is true int1=int2 is false int1=int3 is true array1=array2 is false array1=array3 is true,当操作符=两边都是引用类型变量时,这两个引用变量必须都引用同一 个对象,结果才为tru

32、e。,堆区,Integer对象,Integer对象,int1变量 int3变量 int2变量,equals()方法,equals()方法是在Object类中定义的方法,它的声明格式如下:public boolean equals(Object obj) Object类的equals()方法的比较规则为:当参数obj引用的对象与当前对象为同一个对象,就返回true,否则返回false: public boolean equals(Object obj)if(this=obj)return true;else return false; ,Animal animal1=new Dog(); Ani

33、mal animal2=new Cat(); Animal animal3=animal1;System.out.println(animal1 = animal2); /打印false System.out.println(animal1.equals(animal2); /打印falseSystem.out.println(animal1 = animal3); /打印true System.out.println(animal1.equals(animal3); /打印true,equals()方法,在JDK中有一些类覆盖了Object类的equals()方法,它们的比较规则为:如果两个

34、对象的类型一致,并且内容一致,则返回true。这些类包括:java.io.File、java.util.Date、java.lang.String、包装类(如java.lang.Integer和java.lang.Double类)。,Integer int1=new Integer(1); Integer int2=new Integer(1);String str1=new String(“Hello“); String str2=new String(“Hello“);System.out.println(int1=int2); /打印false System.out.println(in

35、t1.equals(int2); /打印trueSystem.out.println(str1=str2); /打印false System.out.println(str1.equals(str2); /打印true,区分和equals()方法 例题:Which of the following yields a boolean value of true.,Float f1 = new Float(“10F“); Float f2 = new Float(“10F“); Double d1 = new Double(“10D“);a) f1 = f2 b) f1.equals(f2) c)

36、 f2.equals(d1) d) f2.equals(new Float(“10“),基本类型安全转换规则,目标数据类型的位数不小于被转换的数据的数据类的位数,这样才是类型安全的转换,才不会丢失需要转换的信息。基本数据类型 目标类型 byte short char intlongfloat double 高位转化为低位,必须进行强制类型转化 short和char之间的赋值总需要一个强制类型转化,byte b=1; int i=b; short s=(short)i; char c=(char)s;,int a=256; byte b=(byte)a; /数据溢出,变量b的值为0,基本类型安全

37、转换规则 例题: Which of the following lines will compile without warning or error,a) float f=1.3; b) char c=“a“; c) byte b=257; d) boolean b=null; e) int i=10; f) short s=1; char cs=s;,引用类型的类型转换规则,子类赋值给父类,会自动进行类型转换。 父类赋值给子类,需要进行强制类型转换。,一个生物类型的引用变量可以引用任意一个其子类的实例。 一个动物类型的引用变量永远不能引用植物类型的实例。 一个动物类型的引用变量赋值给狗类型

38、的引用变量,需要强制类型转换。,Animal animal; Cat cat; Dog dog;animal=cat; /编译成功 cat=animal; /编译出错 cat=(Cat)animal; /编译成功 dog=(Dog)cat; /编译出错,引用类型的类型转换规则 例题:What will happen if you attempt to compile and run the following code?,class Base class Sub extends Base public class Testerpublic static void main(String arg

39、v)Base b=new Sub();Sub s= b; a) Compile and run without error b) Compile time Exception c) Runtime Exception,Sub s=(Sub)b;,参数传递,如果参数是基本数据类型,参数传递是将参数的数值传递给方法。 如果参数是对象或数组,参数传递是将对象或数组的引用传递给方法。public void methodA()int a=1;String s=“Hello”methodB(a,s); public void methodB(int p1,String p2) ,ParaTest.java

40、,public class ParaTestpublic int v=0;public static void main(String args)/声明并初始化4个局部变量int p1=0; / p1是基本数据类型ParaTest p2=new ParaTest(); /p2 是对象引用类型ParaTest p3=new ParaTest();/p3 是对象引用类型int p4=0; /p4 是数组引用类型/将4个局部变量作为参数传递给changeParameter ()方法changeParameter (p1, p2, p3, p4); /打印4个局部变量System.out.printl

41、n(“p1= “ +p1);System.out.println(“p2.v= “ + p2.v);System.out.println(“p3.v= “ + p3.v);System.out.println(“p40= “ +p40);public static void changeParameter (int p1, ParaTest p2, ParaTest p3, int p4) p1=1; /改变基本数据类型参数的值p2.v=1; /改变对象类型参数的实例变量p3=new ParaTest(); /改变对象类型参数的引用,使它引用一个新的对象p3.v=1; /改变新的对象的实例变量

42、p40=1; /改变数组类型参数的元素 ,打印: P1=0 P2.v=1 P3.v=0 P40=1,ParaTest.java,main(),changeParameter(),int p1=0,ParaTest p2,ParaTest p3,int p4,int p1=0,ParaTest p2,ParaTest p3,int p4,调用,ParaTest对象 v=0,ParaTest对象 v=0,当main方法将参数传递给changeParameter(),两个方法中的p2,p3都分别引用同一个ParaTest实例,int数组 int0=0,ParaTest.java,main(),cha

43、ngeParameter (),int p1=0,ParaTest p2,ParaTest p3,int p4,int p1=1,ParaTest p2,ParaTest p3,int p4,调用,ParaTest对象 v=1,ParaTest对象 v=0,在changeParameter方法中, p3引用了一个新的ParaTest实例,ParaTest对象 v=1,int数组 int0=1,流程控制,分支语句 if-else语句 switch语句 循环语句 for语句 while语句 do-while语句 特殊循环流程控制 continue break,分支语句(if, else语句),下面

44、的语句是非法的:int x=1;if (x) / x is int 你应该使用下列语句替代:int x=1;if (x ! = 0),public void amethod(int x)if(x0)System.out.println(“大于0“);else if(x=0)System.out.println(“等于0“);else if(x0)System.out.println(“小于0“); ,分支语句(switch语句),int x=9;final int Y=2;switch(x)/ 必须是与int类型赋值兼容的变量default: System.out.println(“defau

45、lt”);case 1: System.out.println(“case1”);case Y: System.out.println(“caseY”);,int x=1;final int Y=2;switch(x)/ 必须是与int类型赋值兼容的变量default: System.out.println(“default”);case 1: System.out.println(“case1”); break;case Y: System.out.println(“caseY”);,打印 default case1 caseY,打印 case1,循环语句,/do-while循环 int i

46、=1; doSystem.out.println(i); while(i+3);,/while循环 int i=0; while(i+3)System.out.println(i); ,/for循环 for(int i=1;i=3;i+)System.out.println(i);,打印 1 2 3,流程控制语句,break:从switch语句、循环语句或标号标识的代码块中退出。以下while循环用于把1加到100: int a=1,result=0; one: while(true) result+=a+; if(a=101)break one; /终止循环 System.out.print

47、ln(result); /打印5050 continue:跳过本次循环,执行下一次循环,或执行标号标识的循环体。以下for循环用于对1到100之内的奇数求和: int result=0; for(int a=1;a=100;a+)if(a%2=0)continue; /如果a是偶数,就跳出本次循环,继续执行下次循环else result+=a; System.out.println(result); /打印2500,Java面向对象编程简介,【出版社】电子工业出版社 【作者】孙卫琴 这是国内最经典畅销的介绍Java编程的书籍,被读者誉为中文版的“Java编程思想”。自出版后,到目前为止已经重印了12次。本书已经被翻译为繁体版,在港澳台等地与读者见面。本书以六条主线贯穿全书: 面向对象编程思想 Java语言的语法 Java虚拟机执行Java程序的原理 在实际项目中的运用 设计模式 性能优化技巧,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报