


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Created by AIwen on 2017/5/14.java 是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义 的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具 体存在, java 程序使用类的构造器来创建该类的对象。java 也支持面向对象的三大特征:封装、继承、和多态。 java 提供了 private 、 protected 、和 public 三个访问控 制修饰符来实现良好的封装,提供了 extends 关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和 和方法,如
2、果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关 系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。面向对象的程序设计过程中有两个重要的概念:类( Class) 和对象( object ,也被称为实例, instance )。类可以包 含三种最常见的成员:构造器、成员变量、和方法。构造器用于构造该类的实例, java 语言通过 new 关键字类调用构造器,从而返回该类的实例。构造器是一个类创建 对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此 java 语言提供了一个功能:如果程序员 没有为一个类编写构造器,则系统会
3、为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个 类提供了构造器,系统将不再为该类提供构造器。构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以 把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化 类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。构造器修饰符:可以是 public 、 protected 、 private 其中之一,或者省略构造器名:构造器名必须和类名相同。 注意:构造器既不能定义返回值类型,也不能使用
4、void 声明构造器没有返回值。如果为构造器定义了返回值类型, 或使用 void 声明构造器没有返回值,编译时不会出错,但 java 会把这个所谓的构造器当成方法来处理它就不再 是构造器。实际上类的构造器是有返回值的,当使用new 关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用 return 来返回当前类的对象,因为构造器的返回值是隐式的。java 类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之 间不要使用任何分隔符。成员变量:成员
5、变量的修饰符: public 、 protected 、 private 、static 、 final 前三个只能出现一个再和后面的修饰符组合起来 修饰成员变量,也可省略。成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全 部小写,单词与单词之间不要使用任何分隔符。类型:可以是 java 语言允许的任何数据类型,包括基本类型和引用类型。成员方法:方法修饰符: public 、protected 、 private 、 static 、 final 、 abstract ,前三个只能出现一个, static 和 final 最 多只能出现其中
6、的一个,和 abstract 组合起来使用。也可省略。返回值类型:可以是 java 语言的允许的任何数据类型,包括基本类型和引用类型。 方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执 行。static 是一个特殊的关键字,它可用于修饰方法、成员变量等成员。 static 修饰的成员表明它属于这个类本身,而 不属于该类的单个实例,因此通过把 static 修饰的成员变量和方法被称为类变量、类方法(静态成员变量,静态成 员方法);不使用 static 修饰的成员变量和方法称为
7、实例变量和实例方法(非静态成员变量,非静态成员方法)。 静态成员不能直接访问非静态成员。static 的真正作用就是用于区分成员变量、方法、部类、初始化块,这四种成员到底属于类本身还是属于实例。有 static 修饰的成员属于 类本身,没有类修饰的成员属于该类的实例。java 类大致有如下作用:定义变量创建对象 调用类的类方法或访问类的类变量。定义一个类就是为了重复创建该类的实例,同一个类的多个实例具有相同的特征,而类则是定义了多个实例的共同特 征。类里定义的方法和成员变量都可以通过类或实例来调用。 Static 修饰的方法和成员变量,既可通过类来调用,也可 通过实例来调用;没有使用 stat
8、ic 修饰的普通方法成员变量,只可通过实例来调用。Person p=new Person(); 这行代码创建了一个 Person 实例,也被称为 Person 对象,这个 Person 对象被赋给 p 变量。 在这行代码中实际上产生了两个东西,一个是 p 变量,一个是 Person 对象。 P 引用变量本身只存储了一个地址值,并 未包含任何实际数据,但它指向实际的 Person 对象。Person 对象由多块存组成,不同存块分别存储了 Person 对象的不同成员变量。类是一种引用数据类型,因此程序中 定义的 Person 类型的变量实际上是一个引用, 它被存放在栈存里, 指向实际的 Pers
9、on 对象; 而真正的 Person 对象则 存放在堆存中。当一个对象被创建成功以后,这个对象将保存在堆存中, java 程序不允许直接访问堆存中的对象,只能通过该对象的 引用操作该对象。堆存里的对象可以有多个引用,即多个引用变量指向同一个对象。如果堆存里的对象没有任何变量指向该对象,那么程序将无法再访问该对象,这个对象也就变成了垃圾, java 垃圾回 收机制将回收该对象,释放该对象所占的存区。对象的 this 引用Java 提供了一个 this 关键字, this 关键字总是指向调用该方法的对象。 This 作为对象的默认引用有两种情形: 构造器中引用该构造器正在初始化的对象;在方法中引用
10、调用该方法的对象。This 关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或者实例变量。Java 允许对象的一个成员直接调用另一个成员,可以省略 this 前缀。如果在 static 修饰的方法中使用 this 关键字,则这个关键字就无法指向合适的对象,所以, static 修饰的方法中不 能使用 this 引用。Java 编程时不要使用对象去调用 static 修饰的成员变量、方法、而是应该使用类去调用 static 修饰的成员变量、方 法。如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。 大部分的时候,普通方法访问其他方法、成员变量时无须使用 this 前缀
11、,但如果方法里有个局部变量和成员变量同 名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用 this 前缀。This 引用也可以用于构造器中作为默认引用,由于构造器时直接使用new 关键字来调用,而不是使用对象来调用的,所以 this 在构造器中代表该构造器正在初始化对象。方法:Java 里的方法不能独立存在,所有的方法都必须定义在类里。如果这个方法是用来 static 修饰,则这个方法属于这 个类,否则这个方法属于这个类的实例。执行方法时,必须使用类或者对象作为调用者。同一个类的一个方法调用另 外一个方法时,如果被调方法是普通方法,则默认使用 this 作为调用者;如果被调用方法
12、是静态方法,则默认使用类this 或者类来作为调用者。作为调用者。也就是说 java 中看起来某些方法可以被独立执行,但实际上还是使用Java 里方法参数传递方式只有一种:值传递。所谓值传递,就是讲实际参数值的副本(复制品)传入方法,而参数本 身不会受到任何影响。从 JDK1.5 之后, java 允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时, 在最后一个形参的类型后增加三点() , 则表明该形参可以接受多个参数值,多个参数值被当成数组传入。public class Varargs / 定义形参可变的方法public static void test(int
13、 a,String. books)/books 被当成数组处理for(String tmp:books)System. out .println(tmp);System. out .println(a);public static void main(String args)/ 调用 test 方法test (5,hello,world,aa); 数组形式的形参可以处于形参列表的任意位置,但个数可变的形参只能处于形参表的最后。也就是说最多只能有一个 长度可变的形参。形参可变和传入数组的区别:public static void test(int a,String. books);public
14、static void test(int a,String books);test(5,aa,bb,cc);test(5,new Stringaa,bb,cc);方法重载:Java 允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含了两个或两个以上方法的方法 名相同,但形参列表不同,则被称为方法的重载。Java 程序确定一个方法需要三个要素:调用者;方法名;形参列表。方法的重载要求就是两同一不同: 同一个类中方法名相同, 参数列表不同。 至于方法的其他部分, 如方法返回值类型、 修饰符等,与方法重载没有任何关系。public class OverloadVarargs p
15、ublic void test(String msg)System. out .println( 只有一个参数的 test);/ 因为前面已经有了一个字符串参数的方法,则长度可变形参里不包含一个字符串参数的形式 public void test(String .books)System. out .println( 形参可变的 test 方法 );public static void main(String args)OverloadVarargs olv=new OverloadVarargs();/ 下面两次调用将执行第二个 test 方法olv.test();olv.test(aa,bb
16、);/ 将调用第一个 test 方法 olv.test(aa);/ 将调用第二个 test 方法 olv.test(new Stringaa);Java 中变量分为:成员变量和局部变量。成员变量被分为类变量和实例变量两种,定义成员变量时没有 static 修饰 的就是实例变量,有 static 修饰的就是类变量。变量的命名:从程序的可读性角度来看,应该是多个有意义的单词连缀而成,其中第一个单词首字母小写,后面 每个单词首字母大写。如果通过一个实例修改了类变量的值,由于这个类变量并不属于它,而是属于它对应的类。因此,修改的依然是 类变量,与通过该类来修改类变量的结果完全相同,这会导致该类的其他实
17、例来访问这个类变量时也将获得这个 被修改过的值。成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的初始化阶段或创建该类 的实例时,进行默认初始化。实例变量随实例的存在而存在,而类变量则随类的存在而存在。实例也可访问类变量,同一个类的所有实例访问 类变量时,实际上访问的是该类本身的同一个变量,也就是说,访问了同一片存区。局部变量根据定义形式的不同,又可分为三种形式:形参,方法局部变量,代码块局部变量;局部变量除了形参 之外,都必须显示初始化。在同一个类里,成员变量的作用围是整个类有效,一个类里不能定义两个同名的成员变量,即使一个是类变量, 一个是实例变量也不行;一个方
18、法里不能定义两个同名的方法局部变量,方法局部变量与形参也不能同名;同一 个方法中不同代码块局部变量可以同名;如果先定义代码块局部变量,后定义方法局部变量,前面定义的代码块 局部变量与后面定义的方法局部变量也可同名 .Java 允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖的成员变量,则可使用this( 对于实例变量 ) 或类名(对于类变量)作为调用者来限定访问成员变量。public class VariableOverrideTest / 定义一个 name实例变量 private String name=刚 ;/ 定义一
19、个 price 类变量 private static double price =78.0;public static void main(String args)/ 方法里局部变量覆盖成员变量,将输出 price 的局部变量 65 int price=65;System.out .println(price);/ 使用类名作为 price 变量的限定,将输出 price 类变量的值 System. out .println(VariableOverrideTest.price );new VariableOverrideTest().info();public void info()/ 方法
20、里的局部变量,局部变量覆盖成员变量,输出 name局部变量的值:悟空 String name= 悟空 ;System.out .println(name);/ 将输出 name实例的值:刚 System. out .println();当系统加载类或创建该类的实例时,系统自动为成员变量分配存空间,并在分配存空间后,自动为成员变量指定初始 值。Person p1=new Person(); 时,如果这行代码是第一次使用 Person 类,则系统通常会在第一次使用 Person 类时加载 这个类,并初始化这个类。局部变量定以后,必须经过显式初始化后才能使用,系统不会为局部变量执行
21、初始化。局部变量不属于任何类或者实 例,因此它总是保存在其所在方法的栈存中。如果局部变量时基本类型的变量,则直接把这个变量的值保存在该变量 对应的存中;如果局部变量是一个引用类型的变量,则这个变量里存放的是地址,通过该地址引用到该变量实际引用 的对象或者数组。栈存中的变量无须系统垃圾回收,往往随是方法或代码块的运行结束而结束。 如果定义的某个变量是用于描述某个类或某个对象的固有信息的,这种变量应该定义成成员变量。如果这种信息对这 个类的所有实例完全相同,或者说它是类相关的,则该定义成类变量;如果这个信息是实例相关的,则应该定义成实 例变量。用于保存某个类或某个实例状态信息的变量通常应该使用成员变量。如果某个信息需要在某个类的多个方法之间进行 共享,则这个信息应该使用成员变量来保存。隐藏和封装 访问控制符用于控制一个类的成员是否可以被其他类访问。Java 提供了 3 个访问控制修饰符: private , protected ,和 public, 还有一个默认访问控制修饰符 default Private( 当前类访问权限 ) ; default (包访问权限) ; protected (子类访问权限) :如果一个成员使用 protected 访问 修饰符修饰,那么这个成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年游戏公司项目经理预测试题及正确答案解析
- 桥梁养护知识培训信息课件
- 2025年初创公司技术团队负责人的面试指南与预测题集萃
- 2025年区域可持续发展战略研究试题及答案
- 2025年高新技术应用工程师备考策略与模拟题答案
- 2025年注册验船师资格考试(B级练习题)强化训练试题及答案一
- 后端服务面试题目及答案
- 2025年注册验船师资格考试(B级船舶检验专业基础安全)测试题及答案二
- 2025年注册验船师资格考试(B级船舶检验专业基础环境与人员保护)测试题及答案一
- 2025年篮球教师招聘试题及答案
- 田螺姑娘课文讲解
- 云南迪庆香格里拉市招聘治安联防人员80人笔试模拟试题及参考答案详解1套
- 2025中国医药集团有限公司二级子公司及重点三级子公司高管岗位选聘笔试历年参考题库附带答案详解
- 幼儿园开学食品安全厨房培训
- 地面工程基础知识概要课件
- 村两委内部管理制度
- 工业管道的定期检查与维护措施
- 林业发展“十五五”发展规划
- 过氧化氢低温等离子灭菌器规范
- 2024年四川公安厅招聘警务辅助人员笔试真题
- 彩钢顶翻新施工方案
评论
0/150
提交评论