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:允许任意类访问类的成员。
版权声明:本文为博主原创文章,未经博主允许不得转载。
JAVA学习笔记(33-53)的更多相关文章
- Java学习笔记33(集合框架七:Collections工具类)
数组有工具类,方面操作数组 集合也有工具类:Collections 常用方法示例: package demo; import java.util.ArrayList; import java.util ...
- Java学习笔记33(IO:打印流,IO流工具类)
打印流: 有两个类:PrintStream PrintWriter类,两个类的方法一样,构造方法不一样 PrintStream构造方法:接收File类型,接收字符串文件名,接收字节输出流(Ou ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
随机推荐
- Redis -- 03 持久化
Redis提供了两种不同的方法来将数据存储到硬盘里面,一种叫内存快照,另一种叫只追加文件(AOF),这两种方法既可以同时使用课可以单独使用,也可以都不使用,取决于场景. 快照 快照是将某一时刻的所有数 ...
- haoop 断电后导致block文件损坏
hbase将dfs作为存储,公司测试环境断电后,hadoop集群会因此而损坏一些block文件,这个时候,客户端在读取文件时会报一些错: DataXceiver error processing RE ...
- MySQL基础原创笔记
对表的增删改操作: 创建表: create table student ( id int primary key auto_increment, name ...
- PBR实现2.0
之前的错误和欠缺 1. 过于简单的划分diffuse和specular,非常光滑的非金属材料也是很能反光的2. 费奈尔效应的处理,F0的选取也比较随意3. 没有GI,更不支持AO 正确划分diffus ...
- C#功能杂集
使用unsafe代码 Unsafe, fixed, stackalloc 由于C#可以使用元数据,验证函数签名.对象类型,保证执行过程的安全,如果要使用指针,则不能进行验证,用unsafe表示.uns ...
- AttributeError: '_csv.reader' object has no attribute 'next'
我在使用pyhon3.4运行以下代码时报错:AttributeError: '_csv.reader' object has no attribute 'next' import csv import ...
- A New Beginning
不知不觉中,接触前端已经快两个月了,从一开始的懵懂无知,到现在的--依旧不是很懂,似乎浪费了很多时间,一直都有记纸质笔记.写总结的习惯,写满一本又换一本,却在不知不觉中忽略了自己的实践能力,花费了太多 ...
- Ubuntu1404 (2)
1.启动远程桌面 (1)设置桌面共享:usr->share->applications->桌面共享,勾选"允许查看桌面"和"允许控制桌面",& ...
- UILable
//UILable的大小自适应实例 UILabel *myLable = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];//设定位置与大小 [m ...
- php删除目录下的所有文件和目录
<?php /** * 递归实现删除目录下的所有的文件和文件夹 * @param $dir 要删除的目录 * @param bool $deleteRootToo 是否删除根目录 默认不删除 h ...