您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 4 第四天 魔乐java基础视频学习笔记
1、课程名称:面向对象2、知识点2.1、上次课程的主要知识点1、String类的主要特点:•String类的对象由两种实例化方式;|.方式一:直接赋值,只开辟一块堆内存空间,并且对象可以入池;|.方式二:构造方法,开辟两块堆内存空间,有一块将成为垃圾,不会自动入池,使用intern()方法手工入池;•String对象的比较方法:|.==:比较的是两个字符串对象的内存地址数值;|.equals():字符串内容比较;•字符串对象一旦声明,则内容不可改变,改变的只能是字符串对象的地址指南。2、String类的常用方法:所有的方法要记住返回值类型、方法名称、参数的类型及个数。•字符与字符串:|.【构造方法】将全部字符数组变为字符串:publicString(char[]data);|.【构造方法】将部分字符数组变为字符串:publicString(char[]data,intoffset,intcount);|.【普通方法】取得指定索引位置上的字符:publiccharcharAt(intindex);|.【普通方法】将字符串变为字符数组:publicchartoCharArray();•字节与字符串:|.【构造方法】将全部字节数组变为字符串:publicString(byte[]data);|.【构造方法】将部分字节数组变为字符串:publicString(byte[]data,intoffset,intcount);|.【普通方法】将字符串变为字节数组:publicbyte[]getBytes();|.【普通方法】转码操作:publicbyte[]getBytes(Stringcharset)throwsUnsupportEncodingException•字符串替换:|.【普通方法】全部替换:publicStringreplaceAll(Stringregex,Stringstr);|.【普通方法】替换首个:publicStringreplaceFirst(Stringregex,Stringstr);•字符串查找:|.【普通方法】查找是否包含指定的内容:publicbooleancontains(stringstr);|.【普通方法】查找指定字符串的位置:publicintindexOf(Stringstr);|.【普通方法】从指定位置向后查找指定字符串位置:publicintindexOf(Stringstr,intbegin);|.【普通方法】由后向前查找指定字符串的位置:publicintlastIndexOf(Stringstr);|.【普通方法】从指定位置由后向前查找指定字符串位置:publicintlastIndexOf(Stringstr,intbegin);|.【普通方法】判断是否以指定的字符串开头:publicBooleanstartsWith(Stringstr);|.【普通方法】从指定位置判断是否以指定的字符串开头:publicBooleanstartsWith(Stringstr,intbe);|.【普通方法】判断是否以指定的字符串结尾:publicBooleanendsWith(Stringstr);•字符串截取:|.【普通方法】从指定位置截取到结尾:publicStringsubstring(intbegin);|.【普通方法】截取指定范围:publicStringsubstring(intbegin,intend);•字符串拆分:|.【普通方法】全部拆分:publicString[]split(Stringregex);|.【普通方法】拆分成指定个数:publicString[]split(Stringregex,intlimit);•字符串比较:|.【普通方法】区分大小写比较:publicbooleanequals(Stringstr);|.【普通方法】不区分大小写比较:publicbooleanequalsIngoreCase(Stringstr);|.【普通方法】比较字符串大小:publicintcompareTo(Stringstr);•其他方法:|.【普通方法】判断是否是空字符串:publicbooleanisEmpty();|.【普通方法】取得字符串长度:publicintlength();|.【普通方法】转大写:publicStringtoUpperCase();|.【普通方法】转小写:publicStringtoLowerCase();|.【普通方法】去掉左右空格:publicStringtrim();|.【普通方法】字符串连接:publicStringconcat(Stringstr);|.【普通方法】手工入池:publicStringintern()。3、this关键字,三个主要功能:•this.属性:表示本类中的属性;•this.方法():本类方法、this():本类构造,但是本类构造在调用的时候只能放在构造方法的首行;•ths表示当前对象。4、引用传递给了三个题目,这三个代码和之前讲解的对象引用操作要一起去理解;5、对象比较:是一个类自己本身所具备的功能。2.2、本次预计讲解的知识点1、static关键字;2、内部类;3、引用传递深入。3、具体内容3.1、static关键字(重点)这个关键字一直在见到,从未被真正使用过,而在Java中,static关键字可以用于定义属性及方法。3.1.1、使用static定义属性在讲解static定义属性操作之前,首先编写如下程序。范例:现在定义一个表示北京人的操作类,所有人所在的城市都是北京。classPerson{privateStringname;privateintage;Stringcountry=北京;publicPerson(Stringname,intage){this.name=name;this.age=age;}publicStringgetInfo(){return姓名:+this.name+,年龄:+this.age+,城市:+this.country;}}publicclassTestDemo{publicstaticvoidmain(Stringargs[]){Personper1=newPerson(张三,20);Personper2=newPerson(李四,21);Personper3=newPerson(王五,22);System.out.println(per1.getInfo());System.out.println(per2.getInfo());System.out.println(per3.getInfo());}}那么,以上的程序的内存分配图如下:很明显,现在不管有多少个Person对象,那么所有的country属性都应该是相同的内容,那么现在请思考一下,如果有一天时光穿越了,北京变为燕京了,这个时候如果Person类已经有5000W个对象产生了,你认为此时的代价是什么?5000W个Person对象都要修改country内容,那么如果按照修改一个对象的country属性内容要花费1ms来计算,那么5000W个对象的修改时间是5000WS=很多分钟,那么现在就可以发现问题:•country属性应该是一个公共的内容,但是以上代码是将其分配给了每一个对象;•对country属性维护的时候要考虑的对象太多了,也不方便。所以,如果要想将country与普通属性相区分,并且表示公共的概念,则应该使用static关键字完成。classPerson{privateStringname;privateintage;staticStringcountry=北京;//此处暂时不封装publicPerson(Stringname,intage){this.name=name;this.age=age;}publicStringgetInfo(){return姓名:+this.name+,年龄:+this.age+,城市:+this.country;}}publicclassTestDemo{publicstaticvoidmain(Stringargs[]){Personper1=newPerson(张三,20);Personper2=newPerson(李四,21);Personper3=newPerson(王五,22);per1.country=燕京;System.out.println(per1.getInfo());System.out.println(per2.getInfo());System.out.println(per3.getInfo());}}那么,现在一个对象对country属性所做的修改,一定会影响到其他对象,但是这里有一个问题了,既然使用了static定义的属性表示的是公共属性,那么如果现在由某一个对象修改是不合适的,应该由所有对象的集合的最大代表,就是类了,即:static属性最好的调用,是通过“类名称.static属性”的方式来完成。Person.country=燕京;//类.属性通过本程序,就应该清楚以下几点:•使用static定义的属性不在堆内存之中保存,保存在全局数据区;•使用static定义的属性表示类属性,类属性可以由类名称直接进行调用;•static属性虽然定义了在类之中,但是其可以在没有实例化对象的时候进行调用(普通属性保存在堆内存里,而static属性保存在全局数据区之中);提示:在以后的开发之中,首先想到的不是static属性,而是普通属性。3.1.2、使用static定义方法除了使用static定义属性之外,方法上也可以使用static进行定义,那么很明显,使用static定义的方法也可以在没有实例化对象产生的情况下由类名称直接进行调用。classPerson{privateStringname;privateintage;privatestaticStringcountry=北京;publicPerson(Stringname,intage){this.name=name;this.age=age;}publicstaticvoidsetCountry(Stringc){country=c;}publicstaticStringgetCountry(){returncountry;}publicStringgetInfo(){return姓名:+this.name+,年龄:+this.age+,城市:+this.country;}}publicclassTestDemo{publicstaticvoidmain(Stringargs[]){Person.setCountry(燕京);System.out.println(Person.getCountry());Personper1=newPerson(张三,20);System.out.println(per1.getInfo());}}以上的代码如果单独观察应该都不难理解,主要都是由于static定义的特殊性所决定的,但是现在的类之中就比较热闹了,因为分成了两派:static派、非static派,而对于方法的操作有如下两个定义:•static定义的方法不能调用非static的方法或属性;•非static定义的方法可以调用static的属性或方法。讨论:为什么要有这样的限制呢?•使用static定义的属性和方法,可以在没有实例化对象的时候使用;•非static定义的属性和方法,必须实例化对象之后才可以进行调用。3.1.3、主方法在讲解主方法之前,首先来思考一下小小的区别:在讲解Java方法定义的格式给过以下的格式:如果一个方法在主类之中定义,并且由主方法直接调用的时候,那么前面必须有publicstatic。publicstatic返回值类型方法名称(参数列表){[return[返回值];]}范例:观察代码publicclassTestDemo{publicstaticvoidmain(St
本文标题:4 第四天 魔乐java基础视频学习笔记
链接地址:https://www.777doc.com/doc-5588677 .html