java学习笔记finally

更新时间:2023-12-24 01:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

01 Java标识符

Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。

? 凡是可以自己取名字的地方都叫标识符,都要遵守标识符的命名规则。 Java标识符的命名规则

? 标识符由字母、下划线“_”、美元符号”$”或数字组成。 ? 标识符应以字符、下划线或美元符号开头。 ? Java标识符区分大小写,长度无限制。 约定俗成:

Java标识符应做到见文知意,且不能与java 语言关键字重复。 Java关键字:

02 Java常量

? Java常量值用字符串表示,区分为不同的数据类型。 如整型常量123 实型常量 3.13 字符常量”a”

逻辑常量 true false

字符串常量“hello world”

? 注意:区分字符常量和字符串常量。 ? 参见final关键字。

? 常量指示的是值是不能改变的变量。

03 Java变量

? Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

? Java程序中每一个变量都属于特定的数据类型,在使用前必须对其声明,声明格式为:

Type varname=value; 如int a=123;

? 从本质上讲,变量其实是内存中的一小快区域,使用变量名来访问这块区域。因此,每

一个变量使用前必须要先声明(申请),然后必须进行赋值(填充内容),才能使用。

04 程序执行过程

1程序从硬盘加载到内存区 2找到main函数开始执行

3 执行过程中的内存管理 heap 堆 stack 栈

05 Java变量的分类

? 按其声明的位置划分

局部变量:方法或语句块内部定义的变量。方法体内部声明的变量(包括形参)称为局部变量。方法体内部是指与方法对应的大括号内部。

成员变量:方法外部、类的内部定义的变量。方法体外,类体内声明的变量称为成员变量。

注意:类外面不能有变量的声明。

局部变量和成员变量在内存中属于不同的区域。 ? 按所属的数据类型划分:

基本数据类型变量 引用数据类型变量

Java基本数据类型(4种8类)不同的是数据在内存中所占的长度大小以及0,1在内存中的排列。

数值型:整型(byte 字节型,int 整型,short 短整型,long 长整型) Java各整数类型有固定的表数范围和字段长度。一个字节为8位。

三种整型常量表示方式: 十进制:12 八进制:012 十六进制:0x12

Java语言的整型常量默认为int型,声明long型常量可以后在l或L。 浮点型:(float 单精度 double双精度)

有固定的表数范围和字段长度,不受平台的影响。 两种表示方式: 十进制法:12.32

科学计数法方式:12e3

Java 浮点数默认为double类型,如要声明一个常量为float类型,则需在数字后面加f或F。如double e=122.323; float f=343.34f;

字符型(文本型):char。字符常量为单引号括起来的单个字符。Java字符采用Unicode编码,每个字符占两个字节。

注意:二进制,八进制和十六进制的转换。 布尔型:boolean。适用于逻辑运算,一般用于程序流程控制。只允许取值true或false,不可以用0或非0替代true和false,这点和C语言不同。

06 基础数据类型的转换

? Boolean类型不可以转换为其他的数据类型。

? 整型、字符型、浮点型的数据在混合运算中相互转换,转化时遵循以下原则: ? 容量小的类型自动转换为容量大的数据类型;数据类型按容量大小排序为:

byte,short,char→int→long→float→double

byte,short,char之间不会相互转换,他们三者在计算时首先会转换为int类型。 ? 容量大的类型转换为容量小的数据类型时,要加上强制符,但可能造成精度降低或溢出,

使用时要格外注意。

? 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数

据类型,然后再进行计算。 实数常量默认为double。 整数常量默认为int.

07 程序格式

比算法还重要。

格式应该注意的问题。

? ? ? ? ?

大括号对齐

遇到{缩进,Tab/Shift+Tab 程序块之间加空行 并排语句之间加空行 运算符两侧加空格 1、 有特定条件 ? {前面有空格 ? 成对编程

程序格式的原则

? 要让别人看得清楚 ? 要让别人看得舒服 ?

08 运算符

Java语言支持如下运算符:

? 算法运算符 +, - ,* ,/ ,%, ++ ,-- ? 关系运算符>,<,>=,<=, == ,!= ? 逻辑运算符:!,&,| ,^ ,&&, || ? 位运算符:&,|,^,~,>>,<<,>>>

? 赋值运算符:=,当两侧数据类型不一致时,可以适用默认类型转换或使用强制类型转

换原则进行处理。对于byte,short,char等类型变量,只要不超出其表数范围,则不需要强制类型转换。

? 扩展赋值运算符:+=,-=,*=,/=,

? 字符串连接运算符:+。+运算符两侧的操作数中只要一个是字符串类型,系统会自动将

另一个操作数转换为字符串然后再进行连接。 ++放在后面,先取值后运算 ++放在前面,先运算再取值。

当进行打印的时候,无论任何类型都自动转换为字符串进行打印。

09 表达式

符合一定语法规则的运算符和操作数的序列。 表达式的值和类型:

对表达式中的操作数进行运算得到的结果称为表达式的值。 表达式的值的类型即为表达式的类型。 表达式的运算顺序

应按照运算符的优先级从高到低的顺序进行。

优先级相同的运算符按照事先约定好的结合方向进行。

运算符优先级,结合方向。

三目条件运算符

X?Y:Z

其中X为boolean类型表达式,先计算X的值,若为true,则整个三目运算的结果为Y的表达式的值,否则整个运算结果为表达式Z的值。

默认情况下,实例变量和类变量的初始值取决于其数据类型。

? ? ? ?

数值变量:0 字符变量:‘\\0’ 布尔变量:false 对象:null

字符串的运算

运算符+ 拼接运算

10 对象

创建对象

使用new

VolcanoRobotrobbie = new VolcanoRobot(); 圆括号很重要,不能省略。括号可以为空,在这种情况下,创建的将是最简单最基本的对象;也可以包含参数,这些参数决定了对象的实例变量的初始值和其他初始量。

测试和修改对象的类变量

获取值

要获取实例变量的值,可以使用句点表示法。实例变量和类变量由两部分组成, .句点运算符左边为对象和类的引用; .句点运算符右边为变量名

句点表示法是一种引用对象的实例变量和方法的方式。

类变量是在类中定义和存储的,它们的值适用于类及其所有的实例。 定义类变量的方法是,在前面加上关键字static. 修改类变量的值将影响所有的实例。

调用对象的方法

调用对象的方法时也使用句点表示法。被调用的对象位于句点的左边,方法名及其参数位于句点的右边。 如:

将对象从一个类转换为另一个类

类的对象也可被转换为其他类的对象,但必须满足如下条件:源类和目标类之间存在继承关系,即其中一个类是另一个类的子类。

比较对象、判断对象所属的类、判断对象是否是特定类的实例 比较对象

== 比较对象是否相同(即引用(地址)) equals比较对象的值是否相同

判断对象所属的类

想确定对象所属的类,可以采用下述方法,这里判断的是赋给key的对象所属的类: String name = key.getClass().getName(); 另一种检测方式是instanceof运算符,它使用两个操作数,左边为对象的引用,右边为类名,该表达式返回一个布尔值,如果该对象是这种类或子类的实例,为true,否则为false。

11 数组、逻辑和循环

创建数组 new 系统自动初始化

访问、修改数组,数组名加索引访问和修改数组元素。 如:

inta[] = new int [99]; 自动初始化为0;a[23]访问,a[23] = 23;对数组元素进行修改。 多维数组:

数组可以是多维的,包含多个下标,以多维方式存储信息。

块语句

Java中的语句被组织为块,块以花括号{表示开始,}表示结束。它为块中声明的局部变量创建了作用域,在其中变量存在并可使用,如果在变量的作用域外使用它,将发生错误。

if语句

条件语句仅在指定条件满足时才执行。if条件语句使用布尔表达式来判断是否执行语句。如果表达式返回true,则执行语句。也可以在条件为false的时候执行其他语句,else。

switch 条件语句

如果要与多个值进行比较,用switch语句更佳。如:

在每个case之后,可以有任何数目的语句,每个case中都有一个break 语句,用于指出何时停止执行语句,如果case中没有break语句,则找到匹配的情况后,该case中的语句及其后到break或switch末尾的所有语句都执行。

for循环

for循环用于重复执行语句,直到条件得到满足。 在Java中,for循环的格式如下:

initialization是一个表达式,用来初始化循环的起始状态,test是每次迭代前都要进行的检测,它必须是布尔表达式或返回值为布尔值的函数,increment 用于修改循环变量的值,从而将循环状态引向返回false的状态,最终结束循环。

while和do…while循环 while循环

用于重复执行一条语句,直到特定条件不为true为止。先判断条件,再执行。

do…while 循环

do 循环与while循环非常类似,主要区别在于检测条件的位置。

while循环在循环执行前检测条件,因此如果首次检测条件为false,则循环体一次也不会执行。

do 循环在检测条件之前,至少执行循环体一次,因此如果首次检测条件为false,则循环体已经执行一次了。

跳出循环

在所有循环中,当测试条件满足时循环将结束,有时,在循环执行过程中,当发生了某种情况后,需要提前结束循环,在这种情况下,可以使用关键字break 和continue。

break 立即结束当前循环,如果在循环中嵌套了循环,将跳到外层循环中。

continue 关键字直接进入循环的下一次迭代。对于do 和while 循环这就意味着重新回到块语句从头执行,对于for循环,则计算增量表达式,然后执行块语句。

注意:break和continue的区别

覆盖方法

创建覆盖现有方法的方法

要覆盖方法,只需在子类中创建一个特征标(名称、返回值和参数列表)与超类相同的方法即可。

可在SubPrinter类中覆盖printMe()方法,并在其中添加一条显示实例变量z的语句:

调用原来的方法

例子:

13 包、接口和其他类特性

类是用于创建对象的模板,对象能够存储数据和完成任务。 控制对方法和变量的访问

将类、方法和变量固定下来,禁止在子类中覆盖其定义或值 创建抽象的类和方法,将通用行为放到超类中 将多个类组合成包

使用接口填补类层次结构中的空白

限定符

Java语言提供了4种级别的访问控制:公有、私有、受保护和默认(不使用访问控制限定符) 默认:声明变量和方法时,如果没有使用任何访问控制限定符,则它们对同一个包中的其他任何类都是可用的。

私有:要完全将方法或变量隐藏起来,不被其他类使用,可使用private限定符,这种变量仅在其所在的类中是可见的。

私有实例变量可被其所属类中的方法使用,但不能被其他任何类的对象调用,私有方法也可被其所属类中的其他方法调用,但不能被其他任何方法调用。这种限制也会影响继承:任何私有变量和私有方法都不能被子类继承。 公有:类中的方法或变量可供任何类使用。

保护:使方法和变量仅供以下类使用(子类和同一包中的其他类)

比较各种访问控制级别

继承方法的法则

? 在超类中被声明为公有的方法在子类中必须也是公有的;

? 在超类中被声明为保护的方法在子类中可以是保护的或公有的,但不能是私有的; ? 对于没有访问控制的方法(没有指定限制符),在子类中其访问控制可以更严格。 被声明为私有的方法根本不能继承,因此上述规则不适用。

final类、方法和变量

限定符final用于类、方法和变量,指出它们将不会被修改。 final类不能被继承

final方法不能被子类覆盖 final变量的值不能被修改

抽象类

抽象类可以包含常规类能够包含的任何东西,包含构造函数,因为子类可能需要继承这种方法,抽象类也可以包含抽象方法,这时只有方法特征标,而没有实现方法,这些方法将在抽象类的子类中被实现。抽象类用限定符abstract来声明,不能在非抽象类中声明抽象方法,如果一个抽象类除抽象方法外什么都没有,则使用接口更合适。

包是一种组织类的方式。包中可以包含任意数量的类,这些类的用途相关或有继承关系。 包的用途

? 包能够将类组织成单元

? 包减少了名称冲突带来的问题。

? 包能够大面积地保护类、变量和方法而不是分别对每个类进行保护。 ? 包可以用于唯一地标识类。

14 异常和线程(线程是重点,重新看)

Java中两个功能最强大的元素,线程和异常。

线程是实现了Runnable接口或继承了Thread类的对象,能与Java程序的其他部分同时运行;异常是表示Java运行阶段可能发生的错误的对象。 线程让程序能够更高效地利用其资源,这是通过将程序的计算密集型部分分离开来,避免其降低程序其他部分的速度来实现的;异常让程序能够识别错误并作出响应,异常甚至可以帮助程序校正状态,并在可能的情况下继续运行。

异常

线程

使用Java进行编程时,需要考虑的问题之一是如何使用系统资源。图形、复杂的数学计算和其他密集型任何可能占用大量的处理器时间。 使用图形用户界面的程序尤其如此。

如果你编写的图形Java程序需要完成某种占用大量计算机时间的任务,将发现该程序的图形用户界面的响应速度非常慢。为解决这种问题,可将Java程序中占用大量处理器时间的函数分离开来,让它们同程序的其他部分分开运行。 这时通过线程的特性来实现的。线程是程序的一部分,它们在程序的其他代码执行其他工作时独立运行,这也被称为多任务,因为程序可以同时处理多项任务。 线程适合用于完成占用大量处理时间且连续运行的任务。 通过将程序的工作负荷放到线程中,可以让程序的其他部分处理其他任务。这也使虚拟机能够更容易地对程序进行处理,因为所有的处理器密集型工作都被放到独立的线程中。

15 Java类库

数据结构

表示数据的类,包括如下所述的数据结构 ? 位组(bit set):用于存储布尔值 ? 链表(array list):可调整长度的数组 ? 堆栈(stack):后进先出(LIFO)型结构 ? 散列映射(hash map):使用键存储数据项

iterator 接口

接口iterator 提供了一种以定义好的顺序遍历一系列元素的标准方式。 方法hasNext() 定义了结构是否还包含其他元素 方法next()获得结构中的下一个元素

数据结构的遍历

堆栈

数据结构堆栈用于模拟以特定顺序进行访问的信息。在Java中,Stack类被实现成一个后进先出的堆栈,这意味着最后加入的项将首先被弹出。

堆栈的声明:

Java类Stack 包含用于操作堆栈的方法

可使用push()将新元素加入堆栈,这个方法将元素加入到栈顶。

上述代码将6个字符串压入堆栈,最后一个字符串Six位于栈顶。 可以使用pop()方法将元素从堆栈中弹出,从而将其删除;

上述代码将最后两个字符串从堆栈中弹出,只留下前4个字符串。

如果要获得栈顶元素,但并不将其从堆栈中弹出,可以使用方法peek();

上述操作将返回字符串Four,但该字符串仍保留在堆栈中。

可以使用search()方法在堆栈中搜索元素:

如果找到,则将返回该元素离栈顶的距离,否则返回-1.

Map

接口Map为实现键映射数据结构定义了一个框架,这种结构可用于存储通过键值引用的对象,键值的作用与数组中的索引作用相同,它一个独一无二的值,可用来存储数据结构中指定位置的数据。

可使用类HashMap或其他实现了接口Map的类来实现键映射方法。

键值映射数据结构的组织结构

方法:

put(String,Object): 加入对象 get(String,Object): 获取对象 remove():删除指定键对应的元素 size():获悉结构中包含多少个元素 isEmpty():检查结构是否为空 keyset() 返回set 键值的集合

values()返回collection 值得集合

泛型

可使用java语言支持的泛型来指定数据结构期望的类。

期望类信息被加入将结构赋值给变量或使用构造函数来创建结构的语句中。将期望类用字符<>括起,并将其放在数据结构名的后面。 如:

上述语句创建了一个用于存储Integer对象的ArrayList,不能将String对象加入到这个链表中。 再如:

创建了一个分别用String 对象和Float对象作为键值和值的散列映射,这样,便不能将字符串作为值加入到散列映射中。

16 Java编程

输入和输出

Java中,可以使用被称作流的通信系统来存储和检索信息。 创建输入流和输出流以读取和存储信息。

字节流:用于处理字节、整数和其他简单数据类型。 字符流:用于处理文本文件和其他文本源。 具体参见:http://blog.csdn.net/lanxin0802

注释

单行注释 多行注释 文档注释

Java非访问限制修饰符

Java 访问控制修饰符

17 Java面向对象设计

本文来源:https://www.bwwdw.com/article/4a65.html

Top