JAVA学习笔记(33-53)

33:java中的多维数组,以二位为例:
创建方法:int[][] a = new int[2][3]; 建立一个5*5的数组。
或者下面的建立方法也可以:
int[][] c = {
{1, 2, 3},
{4, 5, 6},
};
获取长度:以c数组为例:
c.length = 2 原因是此数组从宏观上把握有两个元素,所以c.length得到的就是c的长度。
c[0].length = 3 原因是这表示的是数组第一个元素所含的元素的个数,所以为3.
34:基本类型变量和引用类型变量的区别
基本类型变量就相当于c语言中正常的变量,但是引用类型变量就相当于c语言中的指针。基本类型变量和c语言没有什么不同的地方,但是引用类型变量就不同了,比如我在c语言中:
int a = 5;
int b = 10;
int *p = &a;
int *q = &b;
q = p;
那么此时我们q指针也是指向a的,那我们q指针原来指向的区域b就找不到了,但是系统不会自动free掉b,在java中遇到这种情况java虚拟机就会自动回收b的这块空间。
35:我们应该学会使用并了解java中的类,然后自己要学会构造类的方法。正常情况下,在我们的一个.java文件中,我们所要描述的对象会被我们抽象成一个类,java规定我们的文件名必须和我们的类名相同,那么我们的文件中要是需要定义多个类呢,哎呀,其实没有这么复杂,就是和public修饰的那个类名相同就可以了。我们定义的其他类class 前面不要public就行了,在一个类中,它包含以下几样东西,1:属性:就是定义一些数据等 2:构造方法:是为了方便我们初始化使用,可以不写构造方法,这样默认会有一个无参数的构造方法,但是如果想传参数进去,那么注意除了有参数的构造方法,一定要把无参的构造方法也写上。(正常情况下我们都是会传参数进去的,因为我们的类需要针对不同的对象去用)。我们类刚开始定义的那些数据我们可以使用set和get方法分别设置他们的值和得到他们的值。
36:java中字符串是一个由字符构成的序列,与c语言不一样的地方在于:
String s1 = “hello”;
String s2 = “nihao”;
String s3 = “hello”;
因为字符串在程序设计中是不可变的,但是同时又会频繁的使用,所以java虚拟机为了提高效率并且节约内存,会对具有相同字符串序列的字符串直接量使用一个实例。
37:比较两个字符串的大小,是否相等,我们可以使用String类,在java中尽量少使用== >= <= 等。
38:注意:使用字符串时候,往往我们是知道它的直接量值的,为了方便起见,java允许在不创建新的变量的前提下使用字符串直接量字节引用字符串,例如:
“Welcome to Java”.charAt(0); 是正确的,可以返回W.
39:在计算机内部,字符串的值是用私有数组变量表示的,数组是不能从String类的外部访问的,String类提供许多先length()和charAt(index)这样的公共方法以获取该数组的信息。这是一个关于封装的很好的例子。
40:有关String类中的字符串处理方法的总结。(注意!!!!这些方法返回的都是一个新的串,它并不会修改原来的串)

+equals(s1:String):boolean 如果这个字符串等于s1就返回true,要是不相等就返回false 注意这个方法很好用,但是一般情况下不要用“==”,因为“==”只会判断==两端的字符串是否指向同一个引用。
+equalsIgnoreCase(s1:String):boolean 如果不区分大小写这个字符串等于s1就返回true,要是不相等就返回false
+compareTo(s1:String):int 返回一个大于,或者小于或者等于0的整数来表示这个字符串和s1的大小关系
+compareToIgnore(s1:String):int 不区分大小写,别的都和compareTo是一样的
+regionMatches(index:int,s1:String,s1Index:int,len:int):boolean 从调用的字符串下标为index开始比较s1下标为int开始,长度为len的字符串是否相等,如果相等就返回true,否则返回false.
+startsWith(prefix:String):boolean 如果字符串是以perfix的string开头的,返回true,否则返回false
+endsWith(suffix:String):boolean 如果字符串以指定后缀结束就返回true.
+length():int 统计字符串的长度
+charAt(index:int):char 返回下标为index的字符
+concat(s1:String):String 返回连接这个字符串和字符串s1构成的新字符串。
+substring(beginIndex:int):String 返回这个字符串中以指定的beginIndex开始并且延续到这个字符串末尾的子串。
+substring(beginIndex:int,endIndex:int):String 返回这个字串中以beginIndex开始到endIndex-1结束的字串。
+toLowerCase():String 返回将字符串全部转换成小写
+toUpperCase():String 返回将字符串全部转换成大写
+trim():String 返回去掉两端的空白字符之后的新字符串
+replace(oldChar:char,newChar:char):String 返回用一个新的字符替换掉字符串中所有和它匹配的字符之后新的字符串
+replaceFirst(oldString:String,newString:String):String 返回用newString替换掉原来串中第一个oldString的新的串。
+replaceAll(oldString:String,newString:String):String 返回用newString替换掉原来串中所有的oldString的新的串。
+split(delimiter:String):string[] 返回用定界符分隔的字串所构成的一个字符串数组。例如:
String[] tokens = “java#HTML#Perl”.split(“#”,0);
for(int i = 0;i < tokens.length;i++){
System.out.print(tokens[i] + ” “);
}
显示: java HTML Perl
+indexOf(ch:char):int 返回字符串中第一次出现ch的下标,不匹配返回-1
+indexOf(ch:char,fromIndex:int):int 返回fromIndex下标之后第一次出现ch的下标。如果不匹配返回-1
+indexOf(s:String):int 返回第一次出现String的下标
+indexOf(s:String,fromIndex:int):int 返回fromIndex下标之后第一次出现String的下标,不匹配返回-1
+lastIndexOf(ch:int):int 返回字符串中最后一次出现ch的下标
+lastIndexOf(ch:int,fromIndex:int):int 返回fromIndex之前的最后一次出现字符ch的下标。
char[] a = {‘a’,’b’,’c’,’d’};
String s6 = String.valueOf(a);
System.out.println(s6);
将数组a中的元素通过String.valueOf()连接成abcd;
8:StringBuilder/StringBuffer类
这两个类是可以代替String类的另一种处理字符串的解决方案,StringBuilder/StringBuffer类比String更加灵活,可以给一个StringBuilder/StringBuffer中添加,插入,或者追加新的内容,但是String一旦创建,它的值就确定了。除了StringBuff

41:首先学会this的使用,怎么看待this这个东西呢,就把它看做类名。this.xxx就是private定义的xxx。
42:有关对象的思考,其实关于面向对象和面向过程而言,我觉得并没有那么清楚的区分,在面向过程中,一个结构体定义一些函数不就是面向对象吗,倒是先搞清楚需求这种方法确实很好,我们首先得搞清楚我们需要什么。

43:继承:如果一个类class1“扩展自”class2,那么叫做class1继承class2,class1叫做次类,class2叫做超类。超类也叫父类或者基类。次类又称为子类,实际上一个类的子类并不是比父类的功能少的,相反的,子类是父类的扩展。
44:super关键字:
super我们一般用来作为调用父类的方法,调用的方法为 super.方法。
构造方法链:一般情况下,如果一个类A继承自类B,那么在构造一个类A的对象时,子类构造方法会在完成自己的任务之前,首先调用它的父类的无参的构造方法。这个过程持续到沿着这个继承体系结构的最后一个构造方法被调用为止。
45:覆盖方法:
实际上我们在子类中不会显式的使用super去调用父类的方法,因为这样是完全没有必要的,我们直接可以使用父类的方法,因为继承的原因,但是当我们想要覆盖方法的时候,也就是想要将原来的方法修改,那实际上就是基于原来的方法来做一些改动,前提当然是我们要用super首先调用这个方法。
46:覆盖与继承:

class B{
    public void p(double i){
        System.out.println(i*2);
    }
}
class A extends B{
    public void p(double i){
        System.out.println(i);
    }
}
public class Test1 {
    public static void main(String[] args) {
        A a = new A();
        a.p(10);
        a.p(10.0);
    }
}

注意:A类继承B类,那就相当于A类中拥有包含A类和B类的所有方法,在main函数中实例化一个A类的对象叫做a,调用p方法,当A类和B类中的方法参数都为double的时候,虽然一个方法传的值为10,但是实际上相当于会以A类中的方法为主,覆盖了B类中的p方法,并且将10按照处理10.0处理,所以输出10.0,10.0。但是如果父类的p方法参数为int,那对于a中两个可选的方法,它会默认选择与参数最匹配的一个,所以就会输出20,10.0。
47:对象类object和它的toString()方法
java中每个类都源于java.lang.Object类。如果在定义一个类时默认没有指定继承性,那么这个类的父类就是Object。
48:java中多态说白了就是父类型的变量可以引用子类型的对象。
49:动态绑定:
前提:我已经存在一个”B”类
Object o = new B();
System.out.println(o.toString());
这个o.toString()调用的是Object类的toString方法还是B类的toString方法呢?答案是B类,原因就要解释到动态绑定,实际上假设从c1到cn这么多方法,cn为Object,java会默认从c1开始找某个方法,找到就会调用。所以上面的例子会调用B.toString方法,因为一下就找到了。
还应该注意声明类型和实际类型的区别:
声明类型就是上面的Object,一个变量必须被声明为某种类型。
一个引用变量的类型可以是一个null值或者是一个对声明类型变量的引用
变量的实际类型是指被变量实际引用的类型,比如上面的B类型。
50:对象转换和instanceof的作用
instanceof:判断两个类是不是一个继承线上的。
对象转化:这个问题是程序设计观念的关键之处所纠结的地方了
注意:Object 类就不用多说了,类王 Cirlce类是我自己定义的类。
Object myObject = new Cirlce();
if(myObject instanceof Circle){
Systemout.out.println(“The circle is “+((circle)myObject).getDiametre());
}
实际上我一直在纠结两个问题:
(1):为什么不可以通过直接调用Object.getDiametre()方法呢,原因是找不到,使用这个Object.getDiametre()方法会引起一个编译错误。
(2):那为什么不直接Circle一个myObject呢?因为为了通用的程序设计,一个好的经验是把变量定义为父类型,这样它就可以接受任何子类型的信息。
51:Object的equals方法:这个方法使用==检测两个引用变量类型是否指向同一个对象,因此,应该在自己设计的客户类中覆盖这个方法,以测试两个不同的对象是否具有相同的内容。
52:数组线性表ArrayList类:简单来说就是一个类似于链表的东西,接口已经留好,调用接口实现增加删除等功能。非常方便。可以把它看做一个大小不限制,并且用函数可以操作的数组,它可以实现一个栈的模型。下面介绍一些方法:

+add(o:Object):void 增加一个元素
+add(index:int,o:Object):void 往index下标处增加一个
+clear():void 删除线性表中的所有元素
+contains(o:Object):boolean 检查某个元素是否包含在线性表中
+get(index:int):Object 返回这个线性表在特定的下标处的元素
+indexOf(o:Object):int 返回某个元素的下标
+isEmpty(o:Object):boolean 检查线性表是否为空
+remove(index:int):boolean 删除特定下标的元素
+remove(o:Object):boolean 删除某个元素

53:java中 private default protected public 的区别
private : 只有同一个类之间可以访问。
default:同一个类和同一个包以及同一个包中的子类均可以访问,不同包之间不可以。
protected:适用于所有子类访问父类以及同一个包中类之间的访问。
public:允许任意类访问类的成员。
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-11-08 21:35  杨博东的博客  阅读(143)  评论(0编辑  收藏  举报

导航