ImageVerifierCode 换一换
格式:PDF , 页数:27 ,大小:519.07KB ,
资源ID:5981675      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5981675.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java李兴华学习笔记之面向对象基础资料下载.pdf)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

java李兴华学习笔记之面向对象基础资料下载.pdf

1、public static 返回值类型 方法名称(参数列表)重载:方法名称相同,但是参数的类型或个数不同 只要是定义方法,则命名规范是:第一个单词的首字母小写,之后每个单词的首字母大写,例如:printInfo()5、数组:数组属于引用数据类型,所以一定要划分出内存:栈和堆两块内存 数组的定义格式:|-格式一:数据类型 数组名称=new 数据类型长度;|-格式二:|-声明数组:数据类型 数组名称=null;在栈内存中开辟|-开辟数组:数组名称=new 数据类型长度;在堆内存中开辟指定大小的数组 数组的静态初始化:数据类型 数组名称=值;取得数组长度:数组名称.length 数组可以使用方法接收

2、,实际上这一点与内存的关系传递是一样的。数组操作相关的方法:java.util.Arrays.sort(数组名称)、System.arraycopy()数组拷贝 2.2、本次预计讲解的知识点、本次预计讲解的知识点 1、面向对象的基本概念 2、类与对象的关系、引用传递 3、类封装性的操作 4、构造方法的定义及使用 5、String 类的使用 6、this 关键字的作用 3、具体内容、具体内容 3.1、面向对象的概念(了解)、面向对象的概念(了解)面向对象算是一种比较新的软件设计的方法,在没有面向对象之前使用的是面向过程(是针对于一个问题解决问题,如果修改的话,则整个设计都要修改),面向对象是针对

3、于一类问题来进行解决,某一局部的修改不影响其他位置的变化。在面向对象中主要分为以下三个方面:OOA:面向对象分析。OOD:面向对象设计,根据分析的结果使用工具完成设计。北京北京 MLDN软件实训中心软件实训中心 联系电话:010-51283346 第(3)页 共(27)页 E-Mail: OOP:完成具体的功能实现,代码编写。在面向对象中,实际上还存在着三个主要的特性:封装性:保证对外部不可见。继承性:继续发扬广大;多态性:就属于变来变去;3.2、类与对象(、类与对象(重点重点)在整个的面向对象之中,实际上最重要的就是类与对象的关系,也就是说面向对象完全是围绕类展开的。3.2.1、类与对象的关

4、系、类与对象的关系 既然类和对象是核心的基础部分,那么两者之间存在着怎样的关系呢?类:类是一组共性的产物,是同一类事物的集中表现。对象:是一种个性的体现,是个体的产物。对象中的所有操作行为都由类决定,所以,在使用中只要是类定义出的操作对象都可以应用,而如果类没有定义出的操作,对象肯定无法使用。类是对象的模板,对象是类的实例类是对象的模板,对象是类的实例 3.2.2、类与对象的使用、类与对象的使用 在 Java 中可以使用 class 关键字来定义一个类,在类中有两大组成部分:属性(变量)、方法。class Person/定义类 String name;/表示一个人的姓名 int age;/表示

5、一个人的年龄 public void tell()/表示一个功能,说话 System.out.println(姓名:+name+,年龄:+age);在本程序中就定义出了一个类,里面有两个属性:name、age,和一个方法:tell()。在 tell()方法将进行内容的输出。一个类定义完成之后肯定无法直接使用,需要依靠对象进行操作,那么下面给出对象定义格式:类名称 对象名称=new 类名称();一旦有了对象之后就可以通过“对象.属性”或者是“对象.方法()”进行类的调用:public class OODemo01 北京北京 MLDN软件实训中心软件实训中心 联系电话:010-51283346 第

6、(4)页 共(27)页 E-Mail: public static void main(String args)Person per=new Person();/产生对象 per.name=张三;/设置 name 属性的内容 per.age=30;/设置 age 属性的内容 per.tell();/调用方法输出 ;那么下面来进一步分析以上代码的每一步操作:对象产生:Person per=new Person();既然存在了关键字 new,而且类又属于引用数据类型,那么肯定现在就开辟了相应的栈及堆内存空间,而且以上的代码可以拆分成两步:|-声明对象:Person per=null;在栈内存中声明

7、|-实例化对象:per=new Person();开辟对应的堆内存空间 而且一定要记住的是,如果一个对象没有被实例化而直接使用的话,将出现以下的问题:Exception in thread main java.lang.NullPointerException 表示空指向异常,因为没有对应的堆内存空间,而且此种异常肯定会经常出现,那么以上的代码实际上可以表示成以下的内存关系。当通过“对象.属性”实际上表示的就是每一个对应的堆内存空间的属性的操作。那么,如果现在按照以上的规律产生第二个对象肯定是不会互相影响的,因为只要存在了关键字 new 就表示永远会开辟新的内存空间。/表示一个人的姓名 北京北

8、京 MLDN软件实训中心软件实训中心 联系电话:010-51283346 第(5)页 共(27)页 E-Mail: int age;public class OODemo03 public static void main(String args)Person per1=null;Person per2=null;per1=new Person();/实例化 per2=new Person();/实例化 per1.name=张三;per1.age=30;per2.name=李四;per2.age=20;per1.tell();per2.tell();将以上的代码再次形成内存关系图:每一个对象拥

9、有各自的内存空间,所以不会互相影响,而且可以发现一点,每一个对象中实际上保存的只是属性,北京北京 MLDN软件实训中心软件实训中心 联系电话:010-51283346 第(6)页 共(27)页 E-Mail: 并没有保存方法,因为所有的方法都是每个对象所共同拥有的,保存在全局代码区之中。栈内存保存的是对堆内存的引用地址,而堆内存中保存的是每一个对象所拥有的属性,而全局代码区之中保存的是所有类中的方法,表示公共调用。3.2.3、对象的引用传递、对象的引用传递 在数组中本身也属于引用传递,而且发现所谓的引用传递指的就是一个堆内存空间,可以同时被多个栈内存所指向,那么类本身也是一样的,即:一块堆内存

10、可以同时被多个对象所同时指向。public class OODemo04 public static void main(String args)Person per1=null;/实例化 per2=per1;/引用传递 per1.name=张三;此就称为对象的引用传递,可以发现就是使用内存表示出关系。但是,在使用引用传递的过程中也会存在一种问题,如下代码:010-51283346 第(7)页 共(27)页 E-Mail: public class OODemo05 public static void main(String args)Person per1=null;per2=per1;现

11、在的某些空间已经不再使用了,所以就成为了垃圾,只要是垃圾就要等待系统进行垃圾收集,在 java 中使用 GC完成垃圾收集的操作,由于垃圾在程序中会占用系统的资源,所以在开发中一定要尽量避免过多的垃圾产生。3.3、封装性(、封装性(重点重点)封装性属于面向对象的第一大特性,所谓的封装性就是指类内部的定义对外部不可见。范例:观察以下程序的问题 北京北京 MLDN软件实训中心软件实训中心 联系电话:010-51283346 第(8)页 共(27)页 E-Mail: class Person/定义类 String name;public class EncDemo01 public static vo

12、id main(String args)Person per=new Person();per.name=张三;per.age=-30;per.tell();此时,将年龄设置成-30 岁发现没有任何的错误,因为在整型的表示范围之中,是允许设置成负数的,那么在这种情况下,语法没有错,但是从实际来看肯定是错误的,因为没有任何一个人的年龄是-30 岁。那么,会造成这种问题主要就是因为现在类中的属性可以被外部直接访问,那么如果希望属性或方法不希望被外部如果希望属性或方法不希望被外部所访问的话,则可以使用所访问的话,则可以使用 private 关键字声明关键字声明。class Person/定义类 pr

13、ivate String name;/表示一个人的姓名表示一个人的姓名 private int age;/表示一个人的年龄表示一个人的年龄 public void tell()/表示一个功能,说话 System.out.println(姓名:per.name=张三张三;以上在属性的声明中加入了 private 关键字,所以此时,程序编译的时候:EncDemo01.java:11:name has private access in Person per.name=张三;12:age has private access in Person per.age=-30;2 errors 提示的错误是

14、 name 和 age 两个属性在 Person 中属于私有的访问,所以外部无法直接调用。但是,一旦属性被封装之后,访问就成为了一个问题,所以在 JAVA开发的标准规定中,只要是属性封装,则设置和 北京北京 MLDN软件实训中心软件实训中心 联系电话:010-51283346 第(9)页 共(27)页 E-Mail: 取得就要依靠 setter 及 getter 方法完成操作。例如:现在有一个 String name 的属性 setter:public void setName(String n)设置的时候可以进行检查 getter:public String getName()取得时候只是简

15、单的返回 class Person/定义类 private String name;/表示一个人的姓名 private int age;/表示一个人的年龄 public void setName(String n)/设置姓名 name=n;public void setAge(int a)/设置年龄 if(a=0&a=0&a +(str1=str2);/false System.out.println(str1=str3-+(str1=str3);/false System.out.println(str2=str3-+(str2=str3);/false ;以上的内容确实相等,但是使用了“=

16、”之后发现有的相等,有的不等,为什么呢?观察内存关系决定。010-51283346 第(17)页 共(27)页 E-Mail: 从以上的图形中可以清晰的发现,str1 和 str2、str3 的地址完全不一样,但是 str2 和 str3 的地址是一样的,如果按照=比较的结果来看,实际上在使用=操作的时候比较的是两个对象的内存地址,与内容无关。所以所以“=”用用在数值上在数值上表示表示判断判断是是否相等否相等,如果是用,如果是用在了在了对象对象上上,则表示的是,则表示的是判断两判断两个对象的个对象的地址地址是是否相等。否相等。但是,如果现在要是想进行内容比较的话,则就只能靠 String 类提

17、供的方法完成了。No.方法名称方法名称 类型类型 描述描述 1 public boolean equals(String anObject)普通 判断两个字符串的内容是否相等 范例:验证 equals()方法 public class StringDemo05 public static void main(String args)String str1=hello;String str2=new String(hello);String str3=str2;System.out.println(str1 equals str2-+(str1.equals(str2);/true System

18、.out.println(str1 equals str3-+(str1.equals(str3);/true System.out.println(str2 equals str3-+(str2.equals(str3);/true ;通过比较可以发现,虽然现在各个对象的地址不一样,但是通过了 equals()方法进行比较之后,发现比较的是内容,所以,以后只要是字符串的比较操作就统一都使用 equals()方法完成。两种比较两种比较的的区别区别:=和和 equals()=:用于数值比较,比较的是两个字符串的地址值 equals():用于内容的比较,比较两个字符串的内容是否相等 3.7.3、一

19、个字符串就是一个、一个字符串就是一个 String 的匿名对象的匿名对象 在程序中使用“”括起来的内容就属于字符串,那么对于一个普通的字符串来讲,一个字符串就是 String 类的匿名对象可以直接使用。public class StringDemo06 public static void main(String args)System.out.println(hello.equals(hello);通过本程序可以清楚的进行验证,所以之前使用直接赋值的方式为 String 类进行实例化的操作,就属于将一个匿名对象起了一个名字。010-51283346 第(18)页 共(27)页 E-Mail:

20、 3.7.4、两种实例化的区别、两种实例化的区别 String 类的对象可以有两种实例化方式,那么这两种到底有什么区别,以及在开发中到底该使用那种呢?第一种 String str=Hello;按照之前的理解,现在肯定是将一个字符串的堆空间的地址给 str,所以图形如下:此时的代码中,只在堆内存中开辟了一块空间,但是如果现在是第二种方式:String str=new String(Hello);使用构造方法进行对象实例化的时候,由于内部的字符串属于匿名对象的原因,所以将产生两块堆内存空间,其中有一块将成为垃圾。除了内存空间的少之外,如果使用了直接赋值现在还有另外一种好处,就是如果以后如果再声明了

21、与之一样的字符串的话,则不会再重新开辟新的内存空间。public class StringDemo07 public static void main(String args)String str1=hello;String str2=hello;String str3=hello;System.out.println(str1=str2-+(str1=str2);/true System.out.println(str1=str3-+(str1=str3);/true System.out.println(str2=str3-+(str2=str3);此时返回的结果都是 true,所以很明显

22、,以上的三个 String 的对象都同时指向同一个堆内存空间的“hello”字符串,那么如果使用的是构造方法赋值的话,根本不可能实现此效果。之所以内容会相等,是因为在 JAVA底层中存在了一个字符串的对象池,每次的内容都会从池中取出,如果内容已经存在了,则使用已经存在的,如果不存在,则会生成一个新的,放入池中,属于共享共享设设计计模模式式。由于这种原因,只要是使用 String 类的话,永远都要采用直接赋值的方式完成。010-51283346 第(19)页 共(27)页 E-Mail: 3.7.5、字符串的内容一旦声明则不可改变、字符串的内容一旦声明则不可改变 一个字符串肯定是保存在堆内存之中

23、的,所以一旦一个字符串声明之后,则无法改变。public class StringDemo08 public static void main(String args)String str=hello;str=str+world;str+=!;System.out.println(str);现在 str 的内容确实改变了,但是字符串呢?通过程序分析一下。通过内存图可以发现一点,每一个字符串的内容原本并没有发生任何的改变,改变的是只一个字符串的内存地址的指向,而且操作完成之后会发现有很多的垃圾产生,所以,以后对于频繁修改字符串的代码应该尽可能的回避,所以以下的代码是极其垃圾的:public cl

24、ass StringDemo09 public static void main(String args)String str=hello;for(int x=0;x10000;x+)str+=x;010-51283346 第(20)页 共(27)页 E-Mail: System.out.println(str);此种操作的的代码要不断的修改 String 的指向 1000 次,所以肯定将产生极大的垃圾空间,那么这种代码必须回避。3.8、String 类的相关操作(类的相关操作(重点重点)在实际的开发中,String 类的使用是最频繁的,而且在 String 类中提供了大量的操作方法,这些操作

25、方法对于程序的开发都是非常有帮助的,所以必须把该背的都背下来。所有的方法都是在 JDK 的 doc 文档之中存在的。3.8.1、字符串与字符数组、字符串与字符数组 在许多的编程语言中实际上都是一直在强调一个字符串就是一个字符数组,所以在 Java 的 String 类为了体现此概念也提供了以下的一些操作方法:No.方法名称方法名称 类型类型 描述描述 1 public String(char value)构造 将一个字符数组全部变为字符串 2 public String(char value,int offset,int count)构造 将一个字符数组的指定范围的内容变为字符串 3 publ

26、ic char toCharArray()普通 将字符串变为字符数组 4 public char charAt(int index)普通 返回指定位置的字符 范例:观察字符串和字符数组的转换 public class StringAPIDemo01 public static void main(String args)String str=helloworld;char c=str.toCharArray();/将字符串变为字符数组 for(int x=0;xc.length;x+)System.out.print(cx+、);System.out.println(n+new String(

27、c);System.out.println(new String(c,0,5);取出指定位置的字符 public class StringAPIDemo02 public static void main(String args)String str=helloworld;System.out.println(str.charAt(0);System.out.println(str.charAt(3);字符串和字符数组的关系就非常的明确了,当然也可以通过循环的方式,利用 charAt()取出每一个字符的内容,如果要想循环,则肯定要确定字符串的长度,长度通过以下方法求得:010-51283346 第(21)页 共(27)页 E-Mail: No.方法名称方法名称 类型类型 描述描述 1 public int length()普通 求出字符串的长度 但是一定要注意的是,在数组的操作中,可以通过“数组名称.length”求得长度。public class StringAPIDemo03 p

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2