强制类型转换
强制转换就是自动转换的逆转换,当高精度类型到低精度的转换时候需要用(数据类型)变量名来强制转换,由程序员编程决定,编译系统执行,强制类型转换通常都用赋值语句来实现。
注意的是高位转化为低位的时候,数据的范围要在低位范围内,例如不能将一个很大的整数300000转化char型,因为它超过了char范围(65535),结果会出现错误
强制类型举例说明如下:
float f=3.14f;
int i=(int)f;//i的值为3
long j=5;
int i2=(int)j;//i的值为5
类方法转换
使用Integer类的方法parseInt将String转换为对应的整数。
String str=”123”;123为字符串型
基本类型——>String类型
使用String类的重载方法valueOf(基本类型参数)如何将整数int转换成字串String?
有三种方法:
- String s=String.valueOf(i);
- String s=Integer.toString(i);
- String s=””+I;
- 注意:字符串转换成Double,Float,Long的方法大同小异。
运算符(++,–)与操作数的位置有区别是:如果放在变量之前(如+ +i),则变量值先加1或者减1,然后进行其他相应的操作(主要是赋值操作);如果放在变量之后(如i++),则先进性其它相应的操作,然后在进行变量值加1或减1。
在书写时还要注意的是:一元运算与其前后的操作数之间不允许有空格,否则编译时会错。
当参加二元运算的两个操作数的数据类型不同时,所有结果的数据类型精度较高(或位数更长)的那种数据类型一致。
链接运算符(+),当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串;这种情况再输出语句中很常见。如对于如下程序段:
Int max=100;
System.out.println(“max=”+max);
计算机屏幕的输出结果为:max=100,即此时是把变量max中的整数值100转换换成字符串100输出的
循环结构
一个循环结构一般应包含四部分内容:
初始化部分:用来设置循环结构的一些初始条件,如设置计数器等。
循环体部分:反复执行的一段代码,可以是单一语句,也可是复合语句。
迭代部分:用来修改循环控制条件。一般在本次循环结束,下次循环开始前执行。
判断部分:一般是一个关系表达式或逻辑表达式,其值用来判断是否满足循环终止条件。每执行一次循环都要对该表达式求值。
参数信息:@author 作者名
@version 版本号
@since 指明需要最早使用的jdk版本
@param 参数名
@return 参数值情况
@throws 异常抛出情况
循环嵌套:
1.在一个循环体内包含另一个完整的循环体,称为循环嵌套
2.其中内层循环的优先级高于外层循环,即先执行内层循环再执行外层循环
3.嵌套的内、外层循环控制变量不得同名,并且使用嵌套循环时,一个循环必须完整包含在另一个循环之内
例如:
while(){ for( ; ;){ for( ; ;){
while(){ for( ; ;){ while( ){
} } }
} } }
数组:
数组定义:
——数组是一种简单的复合数据类型
——数组是一组同类型有序数据的集合
数组特点:
——数组元素可以用统一的名字和下标来唯一确定
——数组中元素类型必须相同
数组类型:
——一维数组
——二维数组
一维数组:
类型标识符 数组名[常量表达式]
类型标识符(八种基本数据类型、引用类型:String)
数组名 遵循标识符命名规则
常量表达式 表示数组中包含有几个元素
面向对象概述
客观世界是由各种各样的事物(即对象)组成的,每个事物都有自己的静态特性和动态行为,不同事物间的相互联系和相互作用构成两个不同的系统,进而构成整个客观世界。把客观世界中的事物转换成计算机可以识别的,可借助Java语言来完成。
面向对象程序设计(Object Oriented Programming,OOP)是目前软件开发的主流方法,解决问题过程中,需要采用面向对象的分析与设计方法,类是使用OOP解决问题的基础,Java语言是面向对象程序设计语言的显著代表。
- 1. 面向过程与面向对象
面向过程(Procedure Oriented)就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个一次调用。
面向对象(Object Oriented)是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。
- 2. 对象
现实世界中某个具体的物理实体在计算机逻辑中的映射和体现,由描述该对象的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。
对象名:区别其他对象的标志。
对象属性:表示对象所处的状态。
对象操作:用来改变对象的状态达到特定的功能。
提醒:实体:客观世界中存在的可相互区分的事物,可以是人也可以是物,也可以是具体事物也可以是抽象事物。职工、学生、课程、教师、部门等都是实体,有静态的属性又有动态的行为。
- 3. 类(Class)
对具有相同属性和行为的一个或多个对象的描述,是一种抽象的数据类型,是具有一定共性的对象的抽象。
提醒:实例:有某个特定的类所描述的一个具体的对象。类是建立对象时使用的“模板”,按照这个样板建立的一个个的对象,就是类的一个实际的例子。
举例说明:屏幕上有3个大小、颜色、位置各异的圆,可以对它们进行的操作有:显示、放大缩小半径、移动位置等。
- 4. 消息(Message)
消息机制是对象之间进行通信的一种机制,以实现对象之间的相互通信。消息是指一个对象为执行某项特定操作而向另一个对象发送的请求。
- 5. 实体、对象、类之间的关系
实体、对象、类存在不同的世界,通常现实世界中的实体通过大脑的思维后可形成概念世界的抽象数据类,将其用面向对象的语言(如Java)描述,即可转换成计算机世界中的类,从而完成类 到对象的实例化过程,最终完成现实世界中的实体与计算机中的对象之间的映射关系。
面向对象的基本特征
一般认为,面向对象的基本特征主要包括抽象、封装、继承和多态。
- 抽象
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不考虑细节。比如,我们要设计一个学生成绩管理系统,考察学生这个对象时,我们只关心他的班级、学号、成绩等,而不去关心他的身高、体重这些信息。抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,尽管这个操作实际上可能由一系列更低级别的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。
- 封装
封装是面向对象的特征之一,是的对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问通过已定义的界面。类的设计者考虑如何定义类的属性和方法,如何设置其访问权限等,而类的使用者只需要知道类有哪些功能,可以访问哪些属性和方法。只要使用者使用的界面不变,即使类的内部实现细节发生变化,使用者的代码页不需要改变,从而增强了程序的可维护性。在Java中通过private关键字限制对类的成员变量或者成员方法的访问完成封装。
- 继承
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或 增加新的方法使之更适合特殊的需要。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。
- 多态性
多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择、编辑和粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。同一方法作用于不同对象,从而执行不同的代码,得到不同的结果。
面向对象程序设计具有许多优点:
(1) 开发时间短,效率高,可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间。
(2) 应用程序更易于维护、更新和升级。继承和封装使得应用程序的修改带来的影响更加局部化。
类
类是现实世界中实体的抽象集合,是封装了数据和其上操作的复杂的抽象数据类型,具有完整的功能和相对的独立性。
成员方法
Java语言中的功能模块称为方法,类似于其他语言的函数。方法是作用于对象或类上的操作,成员方法描述对象所有的功能或操作,反映对象的行为,是具有某种独立功能的程序模块。一个类或对象可以具有多个成员方法,对象通过执行它的成员方法对传来的消息作出响应,完成特定的功能。
从成员方法的来源看,可以将成员方法分为:
(1) 类库成员方法。由Java类库提供,编程人员只需要按照相应的调用格式去使用这些成员方法即可。Java类库提供了丰富的类和方法,可以完成常见的算术运算、字符串运算、输入输出处理等操作。
(2) 用户自定义的成员方法。用户根据实际问题需要编写成员方法,定义方法和方法体。
类的成员方法基本格式如下:
[修饰符] 返回值类型 方法名 (参数列表)[throws 异常名称]
{ 局部变量声明;
语句序列;
}
方法头
方法头的格式为:
[修饰符] 返回值类型 方法名 (参数列表)[throws 异常名称]
修饰符:可为private、public、protected和default。
返回值类型:可以无返回值即为void类型或有返回值,为Java中的数据类型。
方法名:调用此方法时使用,其命名方法遵守标示命名规则。方法名是一个动词,如果由两个以上单词组成,第一个单词首字母小写,其后首字母大写。如getDept( )。
参数列表:可以有参数也可以无参数,多个参数之间用逗号隔开。
方法体
方法所完成的操作包含在方法体中,方法体包含了所有合法的Java指令。可以拥有自己的局部变量,可以应用类(或其父类)的成员变量和方法。
(1) 方法调用时的参数传递
方法声明中参数列表中的参数称为形式参数。直到方法真正被调用时,才被变量或其他数据取代,而这些具体的变量或数据被称为实际参数。调用一个方法时,这些实际参数的类型与顺序要完全与形式参数相对应。方法的参数传递按照参数的类型分为传值调用与传引用调用两种。
传值调用:方法的参数类型为基本类型,不会改变所传实际参数的数值。
传引用调用:方法的参数类型为复合类型,复合类型变量中存储的是对象的引用,形式参数与实际参数为同一个数据(同一内存空间),对任何形参的改变都会影响到对应的实参。
(2) 方法的嵌套和递归调用
如果一个方法的方法体中调用了另外的方法,则称为该方法的嵌套调用。
如果一个方法的方法体中又调用自身,则称这种方法为直接递归方法。如果一个方法通过调用其他方法而间接地调用到自身,则被称为间接递归方法。
类体
定义类的具体内容,包括类的属性与方法;
(1) 类的属性——描述了该类内部的信息,又称为静态属性,可是简单变量,也可是对象、数组等其它复杂数据结构。
[修饰符] 变量类型 变量名[=变量初值]
[修饰符] 类名 对象名[=new 类名(实际参数列表)
(2) 类方法
类方法即成员函数,规定类属性上的操作,实现类的内部功能机制,也是类与外界进行交互的重要窗口
其定义格式如下:
[修饰符]返回值类型 方法名 (参数列表)[throws 异常名称]
{ 局部变量声明;
语句序列;
}
类的方法的作用:
(1) 围绕着属性进行各种操作;
(2) 与其他的类或对象进行数据交流、消息传递等操作。
成员变量
- 成员变量的分类
成员变量描述了类的静态属性。静态类属性包括两部分:类的特性和对象的特性,相应的Java成员变量也分为两类:类变量和实例变量。实例变量和类变量的作用域为类。
类变量:描述该类的静态属性,被该类所有的对象共享。当类变量的值发生变化时,所有对象都将使用改变后的值。
实例变量:与具体对象有关,记录了对象的现状和特征值,使得每个对象具有各自的特点,以区分不同的对象。
提醒:局部变量是指定义在语句块或方法内的变量。局部变量仅在定义该变量的语句块或方法内起作用,而且要先定义赋值,然后再使用。若某局部变量与实例变量或类变量相同时,则该实例变量或类变量再方法中不起作用,暂时被“屏蔽”起来,只有同名的局部变量起作用;只有退出这个方法后,实例变量和类变量才其作用,此时局部变量不可见。
- 成员变量的使用
类是成员变量定义一般格式如下:
[修饰符]变量类型 变量名[=变量初值];
成员变量声明语句中修饰具体含义解释如下。
final:表示该变量是最终变量。声明为final的变量,必须在声明时包含一个初始化语句对其赋值。常常用来声明常量,在定义常量时,标识符所有字母一般均用大写。
transient:表示将实例变量声明为持久对象的特殊部分。
static:表示定义的时类变量,反之是实例变量。
volatile:表示是并发控制的异步变量。在每次使用volatile类型的变量时都要将他从存储器中重新装载并在使用后存回存储器中。
变量类型:可以是Java中任意的数据类型,可以是基本数据类型也可以是类、接口、数组等复合类型。
变量名:合法的Java标识符,成员变量是唯一的,在一个类中变量名不可重名。
变量初值:定义变量时,完成赋初值。也可以编写方法完成赋初值或者使用构造方法完成创建对象的初始化工作。
类的对象
在Java语言中,类只有实例化即生成对象才能被使用。一个对象的使用分为3个阶段:对象的创建、使用和销毁。
- 对象的生命和创建
创建对象的语法格式:
类名 对象名: //声明对象
对象名=new 类名(参数) //创建对象
对象的声明并不为对象分配内存空间。new运算符使系统为对象分配内存空间并且实例化一个对象。
new运算符调用类的构造方法,返回该对象的一个引用,new运算符可以为一个类实例化多个不同的对象,这些对象暂放不同的存储空间,改变其中的一个对象的属性值,不会影响其它对象的属性值。
也可在声明的同时创建对象,如:
类名 对象名=new 类名(参数) //声明并创建对象
- 对象的使用
对象的使用包括适用对象的成员变量和成员方法,通过运算符“.”可以实现对成员变量的访问和成员方法的调用,访问对象的成员变量的格式为:
对象名.成员变量名:
对象名表示是一个已经存在的对象。
访问对象的成员方法的格式:
对象名.成员方法名(参数列表);
创建简单数据类型的变量和创建某类的对象的异同,实际上二者在根本思想上是一致的:创建变量是以某一个数据类型为模板,这个数据类型上有哪些操作,创建的变量就可以做哪些操作;同样的道理,创建对象以某个类为模板,具有这个类所定义了属性和方法。可见,相对于简单数据类型,类就是用户自己定义的复杂的抽象数据类型;而相对于简单变量对象就是复杂的既包括数据又包括方法代码的复杂数据单位。
创建变量与对象如图
3.对象的销毁
在Java语言中拥有一套完整的对象垃圾回收机制。即程序开发人员不需要手工的回收废弃的对象。垃圾回收将无用对象所占用的内存资源。不过这个垃圾回收器并不是万能的,需要结合其它的对象回收方式,才能够最终解决这个对象回收的问题。在Java中,总共有三种方式可以用来解决对象回收的问题。
(1) 垃圾回收器
垃圾回收器是Java平台中用的最频繁的一种对象销毁方式。垃圾回收器会全程侦测Java应用程序的运行情况。当有些对象为垃圾时,垃圾回收器就会销毁这些对象,并释放这些对象所占用的内存空间。垃圾回收器会认为这些对象(程序执行到对象的作用域之外或把对象的引用赋值为null)是垃圾对象。
(2) finalize方法
Java语言中提供了一个finalize的方法。通过这个方法可以显示的让系统回收这个对象。这是一个Object类的方法。通常情况下,这个方法是被声明protected。程序开发人员定义了这个方法,那么在对象销毁时,垃圾回收器会先采用这个方法来销毁对象。而且在下一次垃圾回收动作时,最终释放对象的内存。
(3) 利用System.gc方法强制启动垃圾回收器
垃圾回收器其实自动启动的。也就是说,垃圾回收机制起会自动监测垃圾对象,并在适当的时候启动垃圾回收器来销毁对象,释放内存。但是这个垃圾回收器也会有不合作的时候。也就是说,这个垃圾回收器不受程序代码的控制,其具体执行的时间也会不确定,从而导致上面的finalize方法无法执行,某些对象无法及时销毁。为此有时候需要利用代码来强制启动垃圾回收器,来销毁对象。
对象由描述该对象特征的数据与
对数据施加的操作的封装成一天。
对象=属性+方法
生活中描述事物无非就是描述事物的属性和行为。
—如:人有身高,体重等属性,有说话,打球等行为。
Java中用类class来描述事物也就是如此
—属性:对应类中的成员变量。
—行为:对应类中的成员函数。
定义类其实在定义类中的成员(成员变量和成员函数)。
构造方法
构造方法是一个特殊的类方法,其名称与类名相同,没有返回类型,完成对新建对象的成员变量进行初始化。一般构造方法声明为public访问权限,一般不能由编程人员显示地直接调用,在创建一个类的对象时,系统会自动地调用该类的构造方法将对象进行初始化。
如果在程序中显示的定义类的构造方法,Java编译器将自动提供一个构造方法,称为默认构造方法。这个方法没有参数,在方法体中也没有任何语句,例如:
public Student(){
}
构造方法——是一种特殊的方法
(1)通过new操作符创建实例时调用构造函数方法
(2)构造方法作用:初始化成员变量
(3)构造方法特点
—方法名和类名相同
—构造方法不需要返回值
—不能通过对象名来访问,只能通过new来访问
—一个类可以有多个构造方法
包
包是Java采用的树结构文件系统组织方法,可把包含类代码的文件组织起来,易于查找和使用。包不仅能包含类和接口,还能包含其它包,形成层次的包空间。包有助于避免命名冲突,包形成层次命名空间,缩小了名称冲突的范围,易于管理名称。
- 包的创建
在Java程序中,package语句必须是程序的第一个非注释、非空白行、行首无空格的一行语句来说明类和接口所属的包。
创建包的一般语法格式:
package PackageName;
关键字package后面的PackageName是包名。包名由小写字母组成,不同层次的包名之间采用“.”分隔该语句创建一个具有指定名字的包,当前.Java文件中的所有类都被放在这个包中。
例如:创建包的语句为:
package com.chapter05; //对应的文件夹为com/chapter05
其中,package为关键字,com.chapter05为包名,以分号结尾。
若源文件中未使用package,则该源文件中的接口和类位于Java的默认包中。在默认包中,类之间可以相互使用public、protected或默认访问权限的数据成员函数。默认包中的类不能被其它包中的类引用。
- 包的引用
将类组织成包的目的是为了更好地利用包中的类。一般情况下,一个类只能引用与它在同一个包中的类,如需要使用其他包中的public类,则可以通过import引入,例如:
import javax.swing.JOptionPane;
把javax.swing包里的JOptionPane类引用进来。如果需要引用整个包内所有类及接口时,就是用*号:
import javax.swing.*;
在一类中引用一个包中的类时,可采用两种方式:
(1) 类长名(Long Name),即加上包名称的类名,如:
java.util.Date date=new java.utilDate( );
(2) 类短名(Short Name),需在类程序最前面引入包,然后使用该类名,如:
import java.util.Date;
……
Date date=new Date();
Java常用类库简介
类库就是Java API(Application Programming Interface,应用程序接口),是系统提供的已实现的标准类的集合。在程序设计中,合理和充分利用类库提供的类和接口,不仅可以完成字符串处理、绘图、网络应用、数学计算等对方面的工作,而且可以大大提高编程效率,使程序简练、易懂。Java类库中的类和接口大多封装在特定的包里,每个包具有自己的功能。表列出了Java中一些常用的包及其简要的功能。其中,报名后面带“.*”的表示其中包括一些相关的包。有关类的介绍和使用方法,Java中提供了极其完善的技术文档。我们只需了解技术文档的格式就能方便地查阅文档。
类的继承
继承性是面向对象程序设计语言的一个重要特征,通过继承可以实现代码的复用。Java语言中,所有的类都是直接或间接继承java.lang.Object类而得到的。被继承的类为基类或父类,继承而得到的类称为子类,基类包括所有直接或间接被继承的类。子类继承父类的属性和方法,并增加自己新的属性和方法。Java不支持多重继承。
类继承的实现
- 创建子类
Java中的继承是通过extends关键字来实现的,在定义新类时使用extends关键字指明新类的基类,就在两个类之间建立了继承关系。
创建子类的一般格式为:
[修饰符] class 子类名 extends 父类名{
……
}
子类名为Java标识符,子类是父类的直接子类。子类可以继承基类中访问控制为public、protected、default的成员变量和方法。但不能继承访问控制为private的成员变量和方法。
- 成员变量的隐藏和方法的重写
在类的继承中,若在子类中定义了与基类相同的成员变量,则在子类中基类的成员变量被隐藏。积累的成员变量在子类对象中仍占据自己的存储空间,子类隐藏基类的同名成员变量只是使它看不见。若在子类中定义了与基类相同的成员方法,子类成员方法清除基类同名方法,子类成员方法清除基类同名的成员方法所占据的存储空间,从而使得基类的方法在之类对象中不复存在。
this和super关键字
- this的使用
当成员方法的形参名与数据成员名相同,或者成员方法的局部变量名与数据成员名相同时,在方法内借助this来表明引用的是类的数据成员,而不是形参或局部变量。简单地说,this代表了当前对象的一个引用,可将其理解为对象的另一个名字,通过名字可以顺利地访问对象、修改对象的实例变量、调用对象的方法。
- super的使用
super表示当前对象的直接基类对象,是当前对象的引用。若子类的实例变量或成员方法名与基类的实例变量或成员方法名相同时,当要调用基类的同名方法或使用基类的同名实例变量,则可以使用关键字super来指明基类的实例变量和方法。
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/276246.html