




免费预览已结束,剩余48页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java体系结构 完整的Java体系结构实际上是由4个组件组合而成 Java编程语言 Java类文件格式 JavaAPI JVM因此 使用Java开发时 就是用Java编程语言编写代码 java 然后将代码编译为Java类文件 class 接着在JVM中执行类文件 Java虚拟机包含一个类装载器 classloader 它可以从程序和API中装载class文件 JVM与核心类共同构成了Java平台 也称为JRE JavaRuntimeEnvironment Java运行时环境 该平台可以建立在任意操作系统上 图1 1显示了Java不同功能模块之间的相互关系 以及它们与应用程序 与操作系统之间的关系 JavaAPI是预先编写的代码 并按相似主题分成多个包 JavaAPI主要分为3大平台 J2EE Java2Platform EnterpriseEdition 该包中包含开发Web应用程序所需的类和接口 有Servlet JavaServerPage 以及EnterpriseJavaBean类等 用于企业应用 支持分布式部署 J2SE Java2Platform StandardEdition 该平台中包含核心Java类和GUI类 用于桌面应用 也是J2EE的基础 J2ME Java2Platform MicroEdition 该包体现了Java的传统优势 为消费类产品提供了一个已优化的运行时环境 用于如传呼机 手机或汽车导航系统 用于小型设备 是J2SE的一个子集 Java工作原理 类 Java标识符 1 标识符必须是字母 数字 下划线 美元符号 错误的例子 javaHelloJava 中间有个空格 Java 2 标识符开头必须由字母 下划线 美元符号开始 3 标识符号对大小写敏感 Java保留字具有专门的意义和用途 不能当作一般的标识符使用 这些标识符称为保留字 reservedword 也称为关键字 下面列出了java语言中的所有保留字 Java数据类型 1 基本类型 2 引用类型 在本小节中 我们就一起来学习一下Java语言的基本数据类型 它包括 boolean char byte int short long float double八种 类型描述取值范围Boolean布尔型只有两个值true falseChar字符型Byte8位带符号整数 128到127之间的任意整数Short16位带符号整数 32768 32767之间的任意整数Int32位带符号整数 231到231 1之间的任意整数Long64位带符号整数 263到263 1之间的任意整数Float32位单精度浮点数根据IEEE754 1985标准Double64位双精度浮点数根据IEEE754 1985标准 4 1boolean型boolean取值为true和false的变量 这种变量称为boolean型变量 Boolean适合于逻辑运算 一般用于程序流程控制 举例 booleanb false if b true dosomething 4 2char型char型是用来表示字母的 它仅能表示一个单一的字母 通常char型常量必须使用单引号括起来 以与数字区分开来 下面就是一个char型变量的实例 charc a 指定变量c为char型 且赋初值为 a 与C C 不同 Java中的字符型数据不能用作整数 因为Java不提供无符号整数类型 但是同样可以把它当作整数数据来操作 例如 intthree 3 charone 1 charfour char three one four 4 上例中 在计算加法时 字符型变量one被转化为整数 进行相加 最后把结果又转化为字符型 4 3整型在Java语言中 提供了多种整型数据类型 byte short int long 它们都是定义了一个整数 唯一的区别就是它们能够表示数据的范围 能够表示数据的范围越大 占用的内存空间也就越大 因此 在程序设计中应该选择最合适的类型来定义整数 大家可以根据以下规律 记住它们所占的内存空间 1 int是最基本的 它占用32位 2 long 长的 也就是比int还长 它占用64位 3 short 短的 也就是比short还短 它占用16位 4 byte 字节 8位组成一个字节 当然byte就只占8位了 注 与C C 不同 Java中没有无符号型整数 而且明确规定了整型和浮点型数据所占的内存字节数 这样就保证了安全性和平台无关性 4 4浮点型在Java语言中有两种浮点数类型 float double 其中float是单精度型 占用32位内存空间 而double是双精度型 占用64位内存空间 注意 各种数据类型之间是可以相互转换的 转换原则 1 数据量小的向数据量大的转换 是可以自动完成的 2 数据量大的如果向数据量小的转换 是必须强制完成的 doubled 10 3 Inti 10 i int d d I Java变量默认初始化原则 4 5引用类型假设我们在函数中写了如下这个简单的语句 StringBufferstr newStringBuffer Helloworld 别看这个语句简单 其实包含了如下三个步骤 首先 newStringBuffer Helloworld 在堆里申请了一坨内存 把创建好的StringBuffer对象放进去 所有的java对象都保存在堆里 其次 StringBufferstr声明了一个指针 这个指针本身是存储在栈上的 因为语句写在函数中 可以用来指向某个StringBuffer类型的对象 或者换一种说法 这个指针可以用来保存某个StringBuffer对象的地址 最后 当中这个等于号 赋值符号 把两者关联起来 也就是把刚申请的那一坨内存的地址保存成str的值 引用对象之间的赋值 判相等再来看赋值的问题 对于如下语句 StringBufferstr2 str 当我们写如下语句 if str2 str 时 只是判断两个指针的值 也就是对象的地址 是否相等 并不是判断被指向的对象是否内容相同 实际上两个指针的值相同 则肯定是指向同一个对象 所以对象内容必定相同 但是两个内容相同的对象 它们的地址可能不一样 比如克隆出来的多个对象之间 地址就不同 创建数据类型 类ClassTypename classbody 通过new来创建这种类型的对象 Typenamea newTypename 数据成员和方法每个对象都保存它自己的数据成员 下面是一个带数据成员的类 ClassDateOnly intI floatf 你可以为这些数据成员赋值 但首先你必须知道如何引用对象的数据成员 对象名称加个点 后面再跟上对象成员名称 比如 DateOnlyd newDateOnly d l 147 d f 4 2f publicclassLight privateintstate publicLight publicvoidon publicvoidoff publicvoidbrighten publicvoiddim 构造函数为对象分配内存空间 包括其所有父类的可见或不可见的变量的空间 并初始化这些变量为默认值 4 1构造函数 一个构造函数是负责对象的初始化工作 为实例变量赋予合适的初始值 构造方法是一种特殊的方法 具有以下特点 1 构造方法的方法名必须与类名相同 2 构造方法没有返回类型 也不能定义为void 在方法名前面不声明方法类型 3 构造方法的主要作用是完成对象的初始化工作 它能够把定义对象时的参数传给对象的域 4 构造方法不能由编程人员调用 而要系统调用 5 一个类可以定义多个构造方法 如果在定义类时没有定义构造方法 则编译系统会自动插入一个无参数的默认构造器 这个构造器不执行任何代码 6 构造方法可以重载 以参数的个数 类型 或排列顺序区分 4 2this this指向当前对象 当前对象指的是调用当前正在执行方法的那个对象 publicclassDemoThis privateStringname privateintage DemoThis Stringname intage setName name 你可以加上this来调用方法 setAge age this print publicvoidsetName Stringname this name name 此处必须指明你要引用成员变量 publicvoidsetAge intage this age age publicvoidprint System out println Name name Age age 在此行中并不需要用this 因为没有会导致混淆的东西 publicstaticvoidmain String args DemoThisdt newDemoThis Kevin 22 4 3super super变量是直接指向超类的构造函数 用来引用超类中的变量和方法 classPerson privateStringname privateintage protectedvoidsetName Stringname this name name protectedvoidsetAge intage this age age protectedvoidprint System out println Name name Age age publicclassDemoSuperextendsPerson publicvoidprint System out println DemoSuper super print publicstaticvoidmain String args DemoSuperds newDemoSuper ds setName kevin ds setAge 22 ds print 输出结果 DemoSuper Name kevinAge 22 4 4static 1 调用静态方法时 不需要产生对象 因为静态方法属于类本身 而不属于对象 调用时 类名 静态方法名 就可以2 classPoint intx staticinty 定义了1个静态变量staticvoidoutput System out println out publicstaticvoidmain String args Point output 调用静态方法Pointpt1 newpoint pt1 y 5 System out println pt1 y 结果out5静态常量和静态方法 都只属于某个类 加载的时候已经有内存空间了 所有对象都共享同1个静态变量 同1个静态方法 引用直接通过类名引用 但非静态方法 可以调用静态方法和静态变量 但反过来 静态方法不能调用非静态变量和非静态方法 4 5final final作为修饰符 可以用来修饰类 方法和变量 1 修饰类 表示该类不能被继承 不能被继承就意味着不能改变里面的代码 对虚拟机的正常运行有重要作用的类通常是final的 比如String System Math 另外说一句废话 final类中的方法是不能被覆盖的 2 修饰方法 表示该方法不能被覆盖 但仍然可以继承这个方法 3 修饰变量 表示变量不能够被改变 即为常量 publicclassTest privatefinalintA 100 publicfinalintB 90 publicstaticvoidmain String args Testt newTest t A 101 出错 final变量的值一旦给定就无法改变 t B 91 出错 final变量的值一旦给定就无法改变System out println t A System out println t B 五 抽象类和接口 5 1抽象类 abstractclass 抽象类就是不能使用new方法进行实例化的类 即没有具体实例对象的类 抽象类有点类似 模板 的作用 目的是根据其格式来创建和修改新的类 对象不能由抽象类直接创建 只可以通过抽象类派生出新的子类 再由其子类来创建对象 当一个类被声明为抽象类时 要在这个类前面加上修饰符abstract 抽象类本身不具备实际的功能 只能用于派生其子类 抽象类中可以包含构造方法 但是构造方法不能被声明为抽象 publicabstractclassDemo abstractvoidmethod1 abstractvoidmethod2 5 2接口 interface Interface关键字进一步强化abstract概念 你可以把它想象成 纯的 abstract类 Interface的意思是所有实现这个接口的类都应该长这个样子 要想创建interface 只要把关键字class替换成interface就行了 Interface也可以包含数据成员 不过它天生就是static和final interface只提供形式 不谈实现 pubicinterfaceDemo voidmethod1 voidmethod2 在abstractclass方式中 Demo可以有自己的数据成员 也可以有非abstarct的成员方法 而在interface方式的实现中 Demo只能够有静态的不能被修改的数据成员 也就是必须是staticfinal的 不过在interface中一般不定义数据成员 所有的成员方法都是abstract的 首先 abstractclass在Java语言中表示的是一种继承关系 一个类只能使用一次继承关系 但是 一个类却可以实现多个interface 也许 这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧 考虑这样一个例子 假设在我们的问题领域中有一个关于Door的抽象概念 该Door具有执行两个动作open和close 此时我们可以通过abstractclass或者interface来定义一个表示该抽象概念的类型 定义方式分别如下所示 使用abstractclass方式定义Door abstractclassDoor abstractvoidopen abstractvoidclose 使用interface方式定义Door interfaceDoor voidopen voidclose 如果现在要求Door还要具有报警的功能 解决方案一 abstractclassDoor abstractvoidopen abstractvoidclose abstractvoidalarm 或者interfaceDoor voidopen voidclose voidalarm 那么具有报警功能的AlarmDoor的定义方式如下classAlarmDoorextendsDoor voidopen voidclose voidalarm 或者classAlarmDoorimplementsDoor voidopen voidclose voidalarm 这种方法违反了面向对象设计中的一个核心原则ISP InterfaceSegregationPriciple 在Door的定义中把Door概念本身固有的行为方法和另外一个概念 报警器 的行为方法混在了一起 解决方案二 既然open close和alarm属于两个不同的概念 根据ISP原则应该把它们分别定义在代表这两个概念的抽象类中 定义方式有 这两个概念都使用abstractclass方式定义 两个概念都使用interface方式定义 一个概念使用abstractclass方式定义 另一个概念使用interface方式定义 显然 由于Java语言不支持多重继承 所以两个概念都使用abstractclass方式定义是不可行的 后面两种方式都是可行的 如果两个概念都使用interface方式来定义 那么就反映出两个问题 1 我们可能没有理解清楚问题领域 AlarmDoor在概念本质上到底是Door还是报警器 问题领域的理解是 AlarmDoor在概念本质上是Door 同时它有具有报警的功能 abstractclassDoor abstractvoidopen abstractvoidclose interfaceAlarm voidalarm classAlarmDoorextendsDoorimplementsAlarm voidopen voidclose voidalarm 小结1 abstractclass在Java语言中表示的是一种继承关系 一个类只能使用一次继承关系 但是 一个类却可以实现多个interface 2 在abstractclass中可以有自己的数据成员 也可以有非abstarct的成员方法 而在interface中 只能够有静态的不能被修改的数据成员 也就是必须是staticfinal的 不过在interface中一般不定义数据成员 所有的成员方法都是abstract的 3 abstractclass和interface所反映出的设计理念不同 其实abstractclass表示的是 is a 关系 interface表示的是 like a 关系 4 实现抽象类和接口的类必须实现其中的所有方法 抽象类中可以有非抽象方法 接口中则不能有实现方法 5 接口中定义的变量默认是publicstaticfinal型 且必须给其初值 所以实现类中不能重新定义 也不能改变其值 6 抽象类中的变量默认是friendly型 其值可以在子类中重新定义 也可以重新赋值 7 接口中的方法默认都是public abstract类型的 六 控制程序流程 6 1使用Java的运算符运算符需要一到两个参数 并且会产生一个新的值 5 1 1Java运算符共分为以下几种 1 算术运算符 2 赋值运算符 3 比较运算符 4 逻辑运算符 5 移位运算符 1 算术运算符 与 比较特殊 可以表示正负号与加 减的运算 另外 还有字符串相联的作用 2 赋值运算符 例 x 3等价于x x 3 3 比较运算符 4 逻辑运算符AND OR 以及NOT 逻辑运算符能生成一个布尔值 true或false 以自变量的逻辑关系为基础 5 位运算符 1按位非也叫做补 一元运算符NOT 是对其运算数的每一位取反 按位与运算符 如果两个运算数都是1 则结果为1 其他情况下 结果均为零 例子 0010101042 00001111150000101010按位异或运算符 只有在两个比较的位不同时其结果是1 否则 结果是零 6 2执行控制1 if else是最基本程序流程控制语句 Else是可选的 所以if有两种用法 If boolean exepression statement或者If boolean exepression statementElsestatement 条件判断 conditional 必须能产生个boolean结果 Statement既可以用分号表示结果 也可以用花括号括起来的复合语句 表示既可以用简单语句 也可以用复合语句 If a true return 正确if a true return 正确if a true a 1 return 错误if a true a 1 return 正确 publicclassTest publicstaticvoidmain Stringargs inti 10 intj 10 if i j System out println I大 elseif i j System out println J大 else System out println 相等 2 循环语句循环是通过while do while和for控制的 它们统统被成为循环语句 While循环用法是 while boolean exepression statement 例如 现在要打印1 100中间的全部数publicclassTest publicstaticvoidmain Stringargs inti 1 while i 100 System out println i i 修改循环条件 Do While循环用法是 dostatementwhile boolean exepression publicclassTest publicstaticvoidmain Stringargs inti 1 do System out println i i 修改循环条件 while i 100 for循环用法是 for initialization boolean exepression step statementpublicclassTest publicstaticvoidmain Stringargs for inti 1 i 100 i System out println i 3 break和continue循环有两种特殊控制语句 一般都要与判断语句一起使用break 忽略尚未执行的代码 并退出循环 publicclassTest publicstaticvoidmain Stringargs for inti 1 i 100 i if i 7 break System out println i continue 跳过尚未执行的代码 中断本次循环 再进入下个周期的循环 publicclassTest publicstaticvoidmain Stringargs for inti 1 i 100 i if i 7 continue System out println i 4 switch 多条件分支语句 switch中的数据类型只能是数字或是字符publicclassTest publicstaticvoidmain Stringargs charscore 1 switch score case 2 System out println D break case 1 System out println E break default System out
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年沐浴清洁海绵合作协议书
- 安全培训救火毯的使用
- Heptyl-nonyl-phthalate-d4-生命科学试剂-MCE
- H-Asn-Arg-OH-diTFA-生命科学试剂-MCE
- 安全培训效果评估与课件
- 2025年宿州市人才集团有限公司招募就业见习人员7人考前自测高频考点模拟试题及答案详解一套
- 2025广西壮族自治区山口红树林生态国家级自然保护区管理中心招聘考前自测高频考点模拟试题及答案详解(全优)
- 健康保健行业消费心理分析
- 合同文件标准化审批流程模版防止遗漏内容
- 2025年猫爬架合作协议书
- 6.2 人大代表为人民 第二课时 课件 2025-2026学年六年级道德与法治 上册 统编版
- 2025年甘肃省金川集团股份有限公司技能操作人员社会招聘400人考试参考试题及答案解析
- 4.2 遵守规则 课件 2025-2026学年 统编版道德与法治八年级上册
- T/CIE 189-2023硫化物全固态锂电池
- 2025年北京市单位劳动合同样本
- 借游戏账号合同5篇
- 广播稿的写法课件
- 2025年中职政治专业资格证面试技巧与答案解析大全
- 保密法课件教学课件
- 十八项核心医疗制度试题(附答案)
- 计生政策培训课件
评论
0/150
提交评论