2018/11/8 Java语言程序设计-定义自己的类 教师:段鹏飞
Java编程语言的特点 强类型 编译和解释 自动无用内存回收功能 面向对象 与平台无关 安全性 分布式计算 多线程
编译运行的过程
Step2:JAVA编译器将其编译为class文件(JVM规范的字节码) 加载代码:由class loader完成 校验代码:由bytecode verifier完成 执行代码:由runtime interpreter完成
JJava程序开发过程 Java程序的开发过程
标准Java程序
Java程序结构 package语句 //0或1条,必须放在文件开始 import语句 //0或多条,必须放在所有类定义之前 public classDefinition //0或1个。文件名必须与该类的类名完全相同 classDefinition //类定义,个数不限 interfaceDefinition //接口定义,个数不限
Java程序结构示例 package javawork.helloworld; /*把编译生成的所有.class文件放到包 import java.awt.*; //告诉编译器本程序中用到系统的AWT包 import javawork.newcentury; /*告诉编译器本程序中用到用户自定义 的包javawork.newcentury*/ public class HelloWorldApp{......} /*公共类HelloWorldApp的定义, 名字与文件名相同*/ class TheFirstClass{......} //第一个普通类TheFirstClass的定义 class TheSecondClass{......} //第二个普通类TheSecondClass的定义 ...... //其它普通类的定义 interface TheFirstInterface{......} //第一个接口TheFirstInterface的定义 ...... //其它接口定义
Java编程规范 包名 类名 接口名 方法名 变量名 常量名 全小写,一般为名词,如:java.awt.event; 首字母大写,每个单词的首字母大写,如:class HelloWorldApp; 接口名 同类名,如:interface Collection; 方法名 一般为动词,小写字母开头,每个单词的首字母都要大写,如:balanceAccount, isButtonPressed; 变量名 全小写,一般为名词,如:length; 常量名 基本类型的常量名为全大写,如:int YEAR, int WEEK_OF_MONTH;对象常量大小写混合。
源文件的命名规则 如果.java文件包含一个public类,它必须按该类名命名。 注意事项 源文件的命名规则 如果.java文件包含一个public类,它必须按该类名命名。 一个源文件中最多只能有一个public类,其他类的个数不限。
注解方式(Comments) /** ~~~ */-文档注解 /* ~~~ */ -程序内的任意位置 //-对本行注解 Java注释 /** * Exam1_1 class实现一个应用 * 将特定的字符串显示到标注输出 */ public class Exam1_1 { public static void main(String[] args) { System.out.println(“This is a Java Application Program."); }
/** 这是一个文档注释的例子,主要介绍下面这个类 */ public class DocTest{ Java注释 /** 这是一个文档注释的例子,主要介绍下面这个类 */ public class DocTest{ /** 变量注释,下面这个变量主要是充当整数计数 */ public int i; /** 方法注释,下面这个方法的主要功能是计数 */ public void count( ) {} }
在命令行输入:javadoc DocTest.java,生成了介绍类DocTest的index.html文件 文档注释的生成 在命令行输入:javadoc DocTest.java,生成了介绍类DocTest的index.html文件
所有Java程序都以类class为组织单元 关键字class定义自定义的数据类型 类定义后面没有; public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World!!!"); }
内容 类与对象的概念 类的定义与名字 类的方法成员 变量 运算符与表达式
什么是编程语言? 编程语言的发展 基本概念 人和计算机进行交流的工具和手段 机器语言: 0101001 汇编语言: mov, push, add, call 第三代语言: 高级语言,以C语言为代表,过程式编程语言(Procedural Programming Language) 第四代语言: 非过程化/面向对象的编程语言 语言的发展: 抽象的过程
“他们的句子书写起来不是一个一个挨着排,各自独立,互相有个区分。它们的句子是将组成该句的每一个字结合到一起。为了方便结合,它们旋转这些字眼,或者对字眼作出种种变形”
对象是现实世界中的实体,Java中的对象是问题领域中对象的模型化表示。 什么是对象object 对象是现实世界中的实体,Java中的对象是问题领域中对象的模型化表示。 例如:“那辆停在我家车库里的红色旧车”
万物皆对象 现实世界是由什么组成的? 世界由对象组成
万物皆对象 动物 ,植物…… 名胜 人 物品 分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地进行分类
从对象抽象出“类” 抽取出下列对象的共同点 轿车 顾客
身边的对象 张浩 李明 收银员 顾客 员工号—10001 姓名—李明 姓名—张浩 部门—财务部 年龄—20 体重—60kg 操作: 收款 打印账单 顾客 姓名—张浩 年龄—20 体重—60kg 操作: 购买商品
说一说教室里的对象,描述他们的属性和方法(功能) 对象的属性和方法 说一说教室里的对象,描述他们的属性和方法(功能) 颜色:黑色 品牌:BENQ 投影 姓名:张三 年龄:20 学习 教员可以根据授课状况 发挥 材制: 木质 支撑物品 类型:白炽灯 开 关
属性——对象具有的各种特征 每个对象的每个属性都拥有特定值 对象的特征——属性 例如:张浩和李明的年龄、姓名不一样 顾客张浩 张浩 20岁 60kg
对象:用来描述客观事物的一个实体,由一组属性和方法构成 对象的特征——方法 方法(功能)——对象执行的操作 对象:用来描述客观事物的一个实体,由一组属性和方法构成 收银 收银员李明 方法 打印账单 刷卡
什么是类class 万物由对象组成,类描述了对象的种类,对象是从类中创建的,对象称为这个类的一个独立的实例(instance)。 例如:“汽车”指的是一个类,“车牌号为***的那辆汽车”、“停在大楼门口的那辆汽车”,“小明开的那辆汽车”都是“汽车”类的实例。
类 顾客类 轿车类 …… 类是模子,确定对象将会拥有的属性和方法 类 具有相同属性和方法的一组对象的集合
类是抽象的概念,仅仅是模板,比如说:“人” 对象是一个你能够看得到、摸得着的具体实体 类和对象的关系 类是抽象的概念,仅仅是模板,比如说:“人” 对象是一个你能够看得到、摸得着的具体实体 “人”类 属性 年龄 体重 方法 衣 食 住 行 奥巴马 普京 萨科奇 ……
如何定义类 定义一个类的步骤 1、定义类名 2、编写类的属性 3、编写类的方法
类将现实世界中的概念模拟到计算机程序中 Java类模板 public class 类名 { //定义属性部分 属性1的类型 属性1; 属性2的类型 属性2; … 属性n的类型 属性n; //定义方法部分 方法1; 方法2; 方法m; }
定义类 编写学生类 学生类 姓名 年龄 班级 爱好 上课学习
定义类 public class Student { 成员变量 String name; //姓名 int age; //年龄 String classNo; //班级 String hobby; //爱好 //输出信息方法 public void study(){ System.out.println(name + "is studying!"); } 成员变量 成员方法
字段(field) 状态(state) 什么是对象的属性 每个对象都具有若干属性(attribute),它们被称为对象的字段。例如:汽车的颜色、品牌、型号、价格等。 同一个类的所有对象都具有相同的字段,即字段的数量、类型和名字是相同的。 同一个类的每一个对象的某个字段的具体指可能不同。 缺省初始值:0或null 状态(state) 对象的状态是由对象的所有字段中所存储的值来表示。
方法调用(method-calling) 在Java中,对象通过调用其他对象的方法来进行互相之间的“通信”。 返回值(return value) 返回值是方法调用的结果 方法可以通过返回值来返回对象的信息。 当一个方法不需要返回值的时候,使用void表示不需要返回值。Eg:main方法
Java语法
对象、变量和属性命名,驼峰命名法,首字母小写 常量命名,全大写,下划线连接 首字符必须是字母 回避Java保留字 命名约定 Java用Unicode编码来记录字符 允许中文变量名(不推荐) 类命名,驼峰命名法,首字母大写 对象、变量和属性命名,驼峰命名法,首字母小写 常量命名,全大写,下划线连接 首字符必须是字母 回避Java保留字
1、Java标识符、关键字、注释 1.1标识符与关键字 1.2注释
程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:类名、变量名、常量名、方法名、… 1.1标识符与关键字 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:类名、变量名、常量名、方法名、… 组成规则: 字母(A~Z、a~z)、特殊符号($、_)和数字(0~9) 第1个符号不能为数字 不能为关键词、true、false、null 区分大小写
例:point4、 5w、 A%、 thisPicture、$currentValue、OK、_23b、Y_123、 1.1标识符与关键字 例:point4、 5w、 A%、 thisPicture、$currentValue、OK、_23b、Y_123、 #length、a+b、if、变量3、True、m-1703 错误:5w、 A%、#length、a+b、if、m-1703
1.1标识符与关键字
2018/11/8 1.1标识符与关键字
在Java中,true、false和null都是小写的。区别于C++中大写的TRUE、FALSE和NULL。 1.1标识符与关键字 在Java中,true、false和null都是小写的。区别于C++中大写的TRUE、FALSE和NULL。 所有的数据类型所占用的字节数都是固定的,并且和实现无关的,因此在Java中没有sizeof操作符。 不必死记这些关键词,当理解每个关键词的含义后,自然就记住了所有的关键词。
2.1 Java基本数据类型(Primary Data Types) 2.2 常量(Constant)和变量(Variable) 2.3 数据类型的转换
程序=数据结构+算法+程序设计方法 +语言工具和环境。 2.1 数据类型 程序=数据结构+算法+程序设计方法 +语言工具和环境。 之所以有数据类型,就是因为计算机存储不同数据类型的方式和空间不同。 什么是程序? 算法、数据结构、程序设计方法、语言工具和环境都是用来描述数据和处理数据的。 标识符区分大小写
2.1 Java基本数据类型
所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。 所有基本类型的关键词都是小写的。 2.1 Java基本数据类型 所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。 所有基本类型的关键词都是小写的。 数据类型 Java C/C++ 所占位数 值的范围 char 16 0 ~65535 8 -27~27-1 byte 0-255 short -215~215-1 int 32 -231~231-1 16/32 - long 64 -263~263-1 32/64 float 3.4e-038 ~3.4e+038 double 1.7e-308 ~1.7e+308
字符型数据代表16位的Unicode字符 字符常量是用单引号括起来的一个字符 字符型数据的取值范围为 示例 2.1 字符类型(char) ‘a’ ‘B’ ‘\n’ ‘\u0030’ 字符型数据的取值范围为 0~65535 或者说 \u0000~\uFFFF \u0000为缺省值 示例 char c1; \\ 缺省值为0 char c2 = ‘0’; \\ 赋初值为字符‘0’ char c3 = 32; \\ 用整数赋初值为空格
Unicode คืออะไร?(in Thai) يونیکُد چيست؟(in Persian) 什么是Unicode(统一码)? What is Unicode? Unicode คืออะไร?(in Thai) يونیکُد چيست؟(in Persian) 什么是Unicode(统一码)? 什麽是Unicode(統一碼/標準萬國碼)? (in Arabic)ما هي الشفرة الموحدة "يونِكود" ؟ Was ist Unicode? (in German) Что такое Unicode?(in Russian) ユニコードとは何か? (in Japanese)
Unicode是16比特的字符编码,其支持当前世界上绝大多数的语言 Windows系统(Windows 2000版本)、JAVA、XML、LDAP等已支持Unicode Unicode实现了ISO/IEC 10646标准 安装附加的语言 开始 > 设置 > 控制面板 > 区域选项 字体(font) Full fonts: If you have Microsoft Office 2000, you can get the Arial Unicode MS font, which is the most complete.
不同字符集编码的内码定义不一样 2.1 为什么需要Unicode? 汉字 GBK BIG5 一 D2BB A440 丁 B6A1 A442 七 C6DF A443
JAVA中的字符、字符串、标识符(变量名、方法名和类名称) 16比特的Unicode字符 Unicode字符集(Unicode character set) 用途: 国际化 \u0000 ~ \uffff,\u是Unicode转义符 当前定义了34,000个Unicode字符 \u0020~\u007e等效于ASC-II字符和ISO8859-1(Latin-1)字符0x20~0x7e char c = ‘\u5E74’; //char c = ‘年’; String s1 = “Java\u8BED\u8A00”; //String s1 = “Java语言”; String s2 = "\u0030\u0031"; //String s2 =“01”; System.out.println(c ); System.out.println(s1); System.out.println(s2);
ascii Latin-1/iso8859-1(0-255) GB2312/GBK,GBK兼容繁体字 2.1 字符发展 ascii Latin-1/iso8859-1(0-255) GB2312/GBK,GBK兼容繁体字 (GB2312 1981年实施,收录6763个汉字, GBK收录21886个字) BIG5,台湾标准,收录13461个字 unicode,支持七千多个汉字 UTF8
布尔型数据只有两个值true和false,且它们不对应于任何整数值 布尔型变量的定义如: 2.1 布尔类型(boolean) 布尔型数据只有两个值true和false,且它们不对应于任何整数值 布尔型变量的定义如: boolean b = true; 布尔型数据只能参与逻辑关系运算: && || == != ! 示例: boolean b1; boolean b2 = true; b = !b2; boolean b = (b1 && b2) != false;
2.2常量和变量 Java中 的 常 量 值 是 用 文 字 串 表 示 的,它 区 分 为 不 同 的 类 型,如 整 型 常 量 123,实 型 常 量 1.23,字 符 常 量 ‘ a’ ,布 尔 常 量 true、false以 及 字 符 串 常 量 "This is a language."。 与 C、 C++不 同,Java中 不 能 通 过 #define命 令 把 一 个 标 识 符 定 义 为 常 量,而 是 用 关 键 字 final来 定义,定义常量的一般格式为: final 类型 常量标识符 = 常数值; final int MAX_NUM = 100; final double PI = 3.1415926;
程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为: 2.2常量和变量 程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为: 类型 变量名 = 值 ; int n1 = 3, n2 = 4; Java中变量的缺省初值都是确定的: 布尔变量的初值为:false 整数变量的初值为:0 浮点数变量的初值为:0.0 引用(复合)变量的初值为:null 在方法实现中定义的变量必须显式的初始化。 变量的作用域 指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。
2.3数据类型的转换 自动类型转换 整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级: 低----------------------------------------------------->高 byte,short,char—> int —> long—> float —> double 操作数1类型 操作数2类型 转换后的类型 byte、short、char int int byte、short、char、int long long byte、short、char、int、long float float byte、short、char、int、long、float double double System.out.println(‘a’)与System.out.println(’a’+1) 的区别。
2.3 常量与变量 自动类型转换(也叫隐式类型转换) 强制类型转换(也叫显式类型转换) 类型转换的原理 什么时候要用强制类型转换? 表达式的数据类型自动提升 • 所有的byte型、short型和char的值将被提升到int型。 • 如果一个操作数是long型,计算结果就是long型; • 如果一个操作数是float型,计算结果就是float型; • 如果一个操作数是double型,计算结果就是double型。 分析 System.out.println(‘a’)与System.out.println(’a’+1) 的区别。
2.3数据类型的转换 自动类型提升 byte b = 3; int x = 4; x = x + b;//b会自动提升为int类型进行运算。 自动类型提升 byte b = 3; int x = 4; x = x + b;//b会自动提升为int类型进行运算。 强制类型转换 b = b + 4;//报错 b = (byte)b+4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋 值给b。 思考: byte b1=3,b2=4,b; b=b1+b2; b=3+4; 哪句是编译失败的呢?为什么呢?
3、Java运算符和表达式 3.1 优先级、结合性以及单/双目运算 3.2 Java 运算符和表达式
优先级、结合性以及单/双目运算 3.1 优先级、结合性以及单/双目运算 1) . , [] , () 9) & 1) . , [] , () 9) & 2) ++ , -- , ! , ~ , instanceof 10) ^ 3) new (type) 11) | 4) * , / , % 12) && 5) + , - 13) || 6) >> , >>> , << 14) ?: 7) > , < , >= , <= 15) = , += , -= , *= , /= , %= , ^= 8) == , != 16) &= , |= , <<= , >>= , >>>=
(1)运算符 3.2 Java 运算符和表达式 算术运算符: +,―,*,/,%,++,―― 关系运算符: >,<,>=,<=,==,!= 布尔逻辑运算符: !,&&,|| 位运算符: >>,<<,>>>,&,|,^,~ 赋值运算符: =,及其扩展赋值运算符如+=,―=,*=,/=等。 条件运算符: ? :
3.2 Java 运算符和表达式 位运算符 运算符 << >> >>> & | ^ ~ 运算 左移 右移 无符号右移 与运算 或运算 异或运算 反码 范例 3 << 2 = 12 ‐‐> 3*2*2=12 3 >> 1 = 1 ‐‐> 3/2=1 3 >>> 1 = 1 ‐‐> 3/2=1 6 & 3 = 2 6 | 3 = 7 6 ^ 3 = 5 ~6 = ‐7
3.2 Java 运算符和表达式 “&”和“&&”的区别: 单&时,左边无论真假,右边都进行运算; 双&时,如果左边为真,右边参与运算,如果左边为假,那 么右边不参与运算。 “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
表达式是由操作数和运算符按一定的语法形式组成的符号序列。 3.2 Java 运算符和表达式 (2)表达式 表达式是由操作数和运算符按一定的语法形式组成的符号序列。 一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值; 表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。 例: x num1+num2 a*(b+c)+d 3.14 x<=(y+z) x&&y||z
1.下列标识符中,哪些是合法的变量名,哪些是不合法的变量名? 练习(1) 1.下列标识符中,哪些是合法的变量名,哪些是不合法的变量名? (1)char (2)2abc (3)$_isTrue (4)i+j (5)_istrue(6)变量6 (7)String (8)3.14159 2.判断下面的程序段是否正确,若有错误,错在哪里,应该如何改正,并且测试改正后的输出结果。 public static void main(String[] args){ ch = ‘a’; char ch; System.out.println(“ch=”+ch); }
练习(2) 3.写出下面程序的运行结果。 //Examplex2_3.java public class Example2_3{ public static void main(String[] args){ int x = 1,a = 0,b = 0; switch(x){ case 0: b++; case 1: a++; case 2: a++,b++; } System.out.prinln(“a=”+a); System.out.prinln(“b=”+b);
练习(3) 4.写出下面表达式的最后运算结果,并且令a = 1,b = 2,c =3,d = false。 (1)a+=b--/++c; (2)d = !((a>=--b/b++<=c--)&&a==b); (3)d = b>c^a!=c; 5.编写Java程序,计算sum = 1!+2!+……+10!。
练习(4) 6.编写Java程序,输出从公元1990年到2007年所有闰年的年号,每输出两个年号换一行。判断年号是否为闰年的条件是: (1)若年号能被4整除,而不能被100整除,则是闰年; (2)若年号能被400整除也是闰年。
7.利用for循环编写一个程序,将如下图案分别打印输出。 * *** ***** ******* 练习(5) 7.利用for循环编写一个程序,将如下图案分别打印输出。 * *** ***** *******
8.编写一个方法来计算正方形的面积和周长。 9.编写程序找出所有的水仙花数;水仙花数是三位数,它的各位数字的立方和等于这个三位数本身。 练习(6) 8.编写一个方法来计算正方形的面积和周长。 9.编写程序找出所有的水仙花数;水仙花数是三位数,它的各位数字的立方和等于这个三位数本身。
2018/11/8 谢谢