您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > java李兴华学习笔记之面向对象(基础)01
北京MLDN软件实训中心联系电话:010-51283346第(1)页共(27)页E-Mail:mldnqa@163.com1、课程名称:面向对象(基础)2、知识点2.1、上次课程的主要知识点1、Java可移植性原理:依靠JVM·所有的*.java文件经过javac编译之后形成*.class文件,之后在JVM上解释执行,由于对于不同的操作系统有不同的JVM,所以程序只要有JVM就可以执行,那么就可以在不同的操作系统平台上运行所有的java程序。2、publicclass和class的区别·使用publicclass声明的类必须与文件名称相同,如果使用class声明的类可以与文件名称不同,但是执行的时候一定要执行已经生成的*.class文件。·在一个*.java的文件之中,只能存在一个publicclass,但是可以同时存在多个class的定义,而且根据不同的class声明,可以自动的划分成不同的*.class文件。·只要是定义类则要求每个单词的首字母大写北京MLDN软件实训中心联系电话:010-51283346第(2)页共(27)页E-Mail:mldnqa@163.com3、Java数据类型划分:·基本数据类型:都是一个个具体的值|-数值型:表示具体的数字,所有的整数默认情况下都是int,所有的小数都是double型的|-整数型:byte、short、int、long|-浮点型:float、double|-字符型:char,使用“'”,而且在中文环境下可以设置一个中文文字,采用的是UNICODE编码|-布尔型:boolean,有true和false两种取值·引用数据类型:是靠着内存关系存在的,例如:类、接口、数组4、方法:是一段可以重复调用的代码段。·如果一个方法要由主方法直接声明,则格式:publicstatic返回值类型方法名称(参数列表)·重载:方法名称相同,但是参数的类型或个数不同·只要是定义方法,则命名规范是:第一个单词的首字母小写,之后每个单词的首字母大写,例如:printInfo()5、数组:数组属于引用数据类型,所以一定要划分出内存:栈和堆两块内存·数组的定义格式:|-格式一:数据类型数组名称[]=new数据类型[长度];|-格式二:|-声明数组:数据类型数组名称[]=null;à在栈内存中开辟|-开辟数组:数组名称=new数据类型[长度];à在堆内存中开辟指定大小的数组·数组的静态初始化:数据类型数组名称[]={值};·取得数组长度:数组名称.length·数组可以使用方法接收,实际上这一点与内存的关系传递是一样的。·数组操作相关的方法:java.util.Arrays.sort(数组名称)、System.arraycopy()数组拷贝2.2、本次预计讲解的知识点1、面向对象的基本概念2、类与对象的关系、引用传递3、类封装性的操作4、构造方法的定义及使用5、String类的使用6、this关键字的作用3、具体内容3.1、面向对象的概念(了解)面向对象算是一种比较新的软件设计的方法,在没有面向对象之前使用的是面向过程(是针对于一个问题解决问题,如果修改的话,则整个设计都要修改),面向对象是针对于一类问题来进行解决,某一局部的修改不影响其他位置的变化。在面向对象中主要分为以下三个方面:·OOA:面向对象分析。·OOD:面向对象设计,根据分析的结果使用工具完成设计。北京MLDN软件实训中心联系电话:010-51283346第(3)页共(27)页E-Mail:mldnqa@163.com·OOP:完成具体的功能实现,代码编写。在面向对象中,实际上还存在着三个主要的特性:·封装性:保证对外部不可见。·继承性:继续发扬广大;·多态性:就属于变来变去;3.2、类与对象(重点)在整个的面向对象之中,实际上最重要的就是类与对象的关系,也就是说面向对象完全是围绕类展开的。3.2.1、类与对象的关系既然类和对象是核心的基础部分,那么两者之间存在着怎样的关系呢?类:类是一组共性的产物,是同一类事物的集中表现。对象:是一种个性的体现,是个体的产物。对象中的所有操作行为都由类决定,所以,在使用中只要是类定义出的操作对象都可以应用,而如果类没有定义出的操作,对象肯定无法使用。类是对象的模板,对象是类的实例3.2.2、类与对象的使用在Java中可以使用class关键字来定义一个类,在类中有两大组成部分:属性(变量)、方法。classPerson{//定义类Stringname;//表示一个人的姓名intage;//表示一个人的年龄publicvoidtell(){//表示一个功能,说话System.out.println(姓名:+name+,年龄:+age);}};在本程序中就定义出了一个类,里面有两个属性:name、age,和一个方法:tell()。在tell()方法将进行内容的输出。一个类定义完成之后肯定无法直接使用,需要依靠对象进行操作,那么下面给出对象定义格式:·类名称对象名称=new类名称();一旦有了对象之后就可以通过“对象.属性”或者是“对象.方法()”进行类的调用:classPerson{//定义类Stringname;//表示一个人的姓名intage;//表示一个人的年龄publicvoidtell(){//表示一个功能,说话System.out.println(姓名:+name+,年龄:+age);}};publicclassOODemo01{北京MLDN软件实训中心联系电话:010-51283346第(4)页共(27)页E-Mail:mldnqa@163.compublicstaticvoidmain(Stringargs[]){Personper=newPerson();//产生对象per.name=张三;//设置name属性的内容per.age=30;//设置age属性的内容per.tell();//调用方法输出}};那么下面来进一步分析以上代码的每一步操作:·对象产生:Personper=newPerson();既然存在了关键字new,而且类又属于引用数据类型,那么肯定现在就开辟了相应的栈及堆内存空间,而且以上的代码可以拆分成两步:|-声明对象:Personper=null;à在栈内存中声明|-实例化对象:per=newPerson();à开辟对应的堆内存空间而且一定要记住的是,如果一个对象没有被实例化而直接使用的话,将出现以下的问题:Exceptioninthreadmainjava.lang.NullPointerException表示空指向异常,因为没有对应的堆内存空间,而且此种异常肯定会经常出现,那么以上的代码实际上可以表示成以下的内存关系。当通过“对象.属性”实际上表示的就是每一个对应的堆内存空间的属性的操作。那么,如果现在按照以上的规律产生第二个对象肯定是不会互相影响的,因为只要存在了关键字new就表示永远会开辟新的内存空间。classPerson{//定义类Stringname;//表示一个人的姓名北京MLDN软件实训中心联系电话:010-51283346第(5)页共(27)页E-Mail:mldnqa@163.comintage;//表示一个人的年龄publicvoidtell(){//表示一个功能,说话System.out.println(姓名:+name+,年龄:+age);}};publicclassOODemo03{publicstaticvoidmain(Stringargs[]){Personper1=null;Personper2=null;per1=newPerson();//实例化per2=newPerson();//实例化per1.name=张三;per1.age=30;per2.name=李四;per2.age=20;per1.tell();per2.tell();}};将以上的代码再次形成内存关系图:每一个对象拥有各自的内存空间,所以不会互相影响,而且可以发现一点,每一个对象中实际上保存的只是属性,北京MLDN软件实训中心联系电话:010-51283346第(6)页共(27)页E-Mail:mldnqa@163.com并没有保存方法,因为所有的方法都是每个对象所共同拥有的,保存在全局代码区之中。栈内存保存的是对堆内存的引用地址,而堆内存中保存的是每一个对象所拥有的属性,而全局代码区之中保存的是所有类中的方法,表示公共调用。3.2.3、对象的引用传递在数组中本身也属于引用传递,而且发现所谓的引用传递指的就是一个堆内存空间,可以同时被多个栈内存所指向,那么类本身也是一样的,即:一块堆内存可以同时被多个对象所同时指向。publicclassOODemo04{publicstaticvoidmain(Stringargs[]){Personper1=null;Personper2=null;per1=newPerson();//实例化per2=per1;//引用传递per1.name=张三;per2.age=20;per1.tell();}};此就称为对象的引用传递,可以发现就是使用内存表示出关系。但是,在使用引用传递的过程中也会存在一种问题,如下代码:北京MLDN软件实训中心联系电话:010-51283346第(7)页共(27)页E-Mail:mldnqa@163.compublicclassOODemo05{publicstaticvoidmain(Stringargs[]){Personper1=null;Personper2=null;per1=newPerson();//实例化per2=newPerson();//实例化per1.name=张三;per1.age=30;per2.name=李四;per2.age=20;per2=per1;per2.tell();}};现在的某些空间已经不再使用了,所以就成为了垃圾,只要是垃圾就要等待系统进行垃圾收集,在java中使用GC完成垃圾收集的操作,由于垃圾在程序中会占用系统的资源,所以在开发中一定要尽量避免过多的垃圾产生。3.3、封装性(重点)封装性属于面向对象的第一大特性,所谓的封装性就是指类内部的定义对外部不可见。范例:观察以下程序的问题北京MLDN软件实训中心联系电话:010-51283346第(8)页共(27)页E-Mail:mldnqa@163.comclassPerson{//定义类Stringname;//表示一个人的姓名intage;//表示一个人的年龄publicvoidtell(){//表示一个功能,说话System.out.println(姓名:+name+,年龄:+age);}};publicclassEncDemo01{publicstaticvoidmain(Stringargs[]){Personper=newPerson();per.name=张三;per.age=-30;per.tell();}};此时,将年龄设置成-30岁发现没有任何的错误,因为在整型的表示范围之中,是允许设置成负数的,那么在这种情况下,语法没有错,但是从实际来看肯定是错误的,因为没有任何一个人的年龄是-30岁。那么,会造成这种问题主要就是因为现在类中的属性可以被外部直接访问,那么如果希望属性或方法不希望被外部所访问的话,则可以使用private关键字声明。classPerson{//定义类privateStringname;//表示一个人的姓名privateintage;//表示一个人的年龄publicvoidtell(){//表示一个功能,说话System.out.println(姓名:+name+,年龄:+age);}};publicclassEncDemo01{publicstaticvoidmain(Stringargs[]){Personper=newPerson();per.name=张三;per.age=-30;per.tell();}};以上在属性的声明中加入了private关键字,所以此时,
本文标题:java李兴华学习笔记之面向对象(基础)01
链接地址:https://www.777doc.com/doc-5892627 .html