|
java 私塾第六、七章笔记整理
第六章 常见类的使用
一. Object类
equals方法:]object类的equals方法作用同 = = 相同,比的是地址。
equals只能比较引用变量,= =还可以比较基本数据类型。
public boolean equals(Object obj) {
return (this == obj);
}
特例:当equals方法进行比较时,对类File,String,Date及包装类来说,是比较类型及内容,而不考虑引用的是否是同一实例。
Integer 类中重写的equals方法:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
先比较是否是同一数据类型,再比较值是否相等。
hashcode方法
(1) 同一程序执行期间,对同一个对象调用hashcode,必须返回相同的整数结果。
(2) 如果两个对象被equals方法视为相等,那么对这两个对象调用hashcode方法必须获得相同的整数结果。
(3) 如果两个对象被equals方法视为不相等,那么对这两个对象调用hashcode方法不必产生不同的整数结果。
如果两个对象相同,那么他们的hashcode值一定要相同;如果两个对象的hashcode相同,他们并不一定相同。
toString方法:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
object类中实现的toString方法是返回当前对象的类型和内存地址信息,其他一些子类(如String, Date)中进行了重写,也可根据需要在用户自定义类型中重写toString()方法。
除了显示的调用toString(0方法外,进行String与其他数据类型连接操作时,会自动调用toString()方法
(1) 引用类型数据直接调用其toString()方法转换为String类型。
(2) 基本数据类型先转换为对应的包装类型,再调用该包装类型toString()方法转换为String类型。
System.out.println()方法输出引用类型数据时,也先调用了该对象的toString()方法,然后再将返回的字符串输出。
二.String 类
String color = “blue”;
只有一个对象存放在栈内存里。
String color = new Stirng(“blue”);
两个对象一个在栈内存一个在堆内存。
String 的常用方法
Length()
返回String的长度,按照char返回长度。
与数组不同,String是length()方法,数组是length属性。
charAt(int index)
获得字符串指定位置的字符。
getByte()
将String编码为byte序列,并将结果存储到一个新的byte数组中。
getChars(int srcBegin, int srcEnd,char [] dst, int dstBegin)
拷贝字符串的部分字符序列到指定的字符数组的指定位置。
对于字符串中的汉字,是按照char来计算的,一个中文汉字占两个字节,用字节数减去char的length()的长度,即为汉字数。
- public class TestString{
- public static void main(String [] args){
- String str="我们abc";
- char [] a= new char [5];
- System.out.println(str.length());
- System.out.println(str.charAt(2));
- System.out.println("汉字个数:" + (str.getBytes().length-str.length()));
- str.getChars(0,4,a,1);
- for(int i: a)
- System.out.println((char)i);
- }
- }
复制代码 输出结果:
5
a
汉字个数:2
我
们
a
b
字符串比较
方法 compareTo(String s)
比较两个字符的大小,返回0表示相等。返回大于0的数表示前边的字符串大于后面的字符串,返回小于0的表示后边的字符串大于前边的,区分大小写。- public class TestString{
- public static void main(String [] args){
- System.out.println("abc".compareTo("ABc"));
- }
- }
复制代码 输出结果:
32
方法 compareToIgnoreCase(String s)
忽略大小写比较两个字符串的大小。
查找字符串中的字符或子串
方法indexOf()
返回第一次找到时的下标,如果没找到则返回-1。
方法lastIndexOf(int ch, int fromIndex)
从指定位置往回查找,返回找到的最大的字符下标的位置。若未找到,返回-1。
方法startWith(String prefix)
测试此字符串是否以指定的前缀开始
方法startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
方法endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
从当前字符串中抽取子字符串
方法subString(int beginIndex)
返回新的字符串:当前字符串的子串。该子串从指定位置开始,并一直到当前字符串结束为止。
方法subString(int beginIndex, int endIndex)
返回新的字符串:当前字符串的字串
该字串从指定位置开始,到指定位置结束。
字符串拼接
方法 concat(String s)
拼接两个字符串返回一个新字符串。源字符串不会被修改。
类String的成员方法valueOf
将参数的值转换为字符串
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
字符串分解
方法 split(String regex)根据正则表达式的匹配拆分此字符串,得到拆分好的字符串数组。
方法replace(char1,char2)
方法toUpperCase
方法trim()
方法toString()
方法toCharArray()
- public class TestString{
- public static void main(String [] args){
- String str = "abcdefabc";
- String s2 = "ABC";
- int a = 100;
- String s3 = "这里,是java,私塾";
- String [] s4= s3.split(",");
- String s5 = " abcdefabc ";
- System.out.println(str.indexOf("def"));
- System.out.println(str.lastIndexOf("abc",8));
- System.out.println(str.startsWith("a"));
- System.out.println(str.startsWith("a",6));
- System.out.println(str.substring(3,6));
- System.out.println(str.concat(s2));
- System.out.println(String.valueOf(a));
- System.out.println(String.valueOf(a));
- for(int i=0; i<s4.length; i++)
- System.out.println(s4[i]);
- System.out.println(str.replace('a','o'));
- System.out.println(str.toUpperCase());
- System.out.println(s5.trim());
- System.out.println(str.toCharArray());
- }
- }
复制代码 输出结果:
3
6
true
true
def
abcdefabcABC
100
这里
是java
私塾
obcdefobc
ABCDEFABC
abcdefabc
abcdefabc
三.正则表达式
正则表达式是用于进行文本匹配的工具,也是一个匹配的表达式。
四.StringBuffer类和StringBuilder类
类String---字符串对象一旦创建,其内容不能再被修改
类StringBuffer---内容可以被修改;
除了字符的长度外还有容量的概念;初始容量为16字符。
通过动态改变容量的大小,加速字符管理。
方法 length()
返回 StringBuffer 的长度
方法 capacity()
返回StringBuffer 的容量
方法setLength(int newLength)
增加或减小 StringBuffer 的长度
方法 charAt(int index)
返回StringBuffer 对象中指定位置的字符
方法setCharAt(int index, char ch)
设置 StringBuffer 对象中指定位置的字符
方法 getChars(int srcBegin, int srcEnd,
Char[] dst, int dstBegin)
将StringBuffer 对象中指定的字符子序列,拷贝到指定的字符数组(dst)
方法 reverse()
将StringBuffer 对象中的字符序列按逆序方式排列,可用作字符串倒序
方法append(…)
允许数值类型的值添加到StringBuffer对象中
方法insert()
允许将各种数据插到StringBuffer 对象的指定位置
方法 delete(int start, int end) 和 deleteCharAt(int index)
允许删除StringBuffer 对象中的指定字符
- public class TestString{
- public static void main(String [] args){
- StringBuffer sb = new StringBuffer("abcdefg");
- char [] a = new char[10];
- System.out.println(sb.length());
- System.out.println(sb.capacity());
- sb.setLength(10);
- System.out.println(sb.length());
- sb.setCharAt(1,'A');
- System.out.println(sb);
- sb.getChars(0,5,a,0);
- for(int i=0; i<a.length; i++)
- System.out.println(a[i]);
- System.out.println(sb.reverse());
- System.out.println(sb.append("aaaa"));
- System.out.println(sb.delete(0,3));
- }
- }
复制代码 输出结果:
7
23
10
aAcdefg
a
A
c
d
e
gfedcAa
gfedcAaaaaa
gfedcAaaaaa
五.Math类(final类,不可继承)
1:常数
PI :double,圆周率
E :double,自然对数
2:截取(注意方法的返回类型)
double ceil(double d)
返回不小于d 的最小整数
double floor(double d)
返回不大于d 的最大整数
int round(float f)
返回四舍五入后的整数
long round(double d)
返回四舍五入后的整数
3:变换(int long float各种类型相似)
double abs(double d)
返回绝对值
double min(double d1, double d2)
返回两个值中较小的值
double max(double d1, double d2)
返回两个值中较大的值
4:对数
double log(double d)
自然对数
double exp(double d)
E 的指数
5:其它
double sqrt(double d)
返回平方根
double random()
返回随机数
六.如何给Java代码设置系统属性?如何在程序中使用它们
设置:Java有一个类properties描述了名字和值之间的映射;
使用例子:System.getProperties();
System.setProperties();
七.简述properties文件的结构和基本用法
结构:(设置在一个扩展名为properties的文件,内容为key,value的映射)
key=value
用法:
System.getProperties 方法返回系统的Properties 对象。
System.getProperty(String propertyName)方法返回对应名字属性的值。
System.getProperty(String name, String value)重载方法当没有name指定的属性 时,返回value 指定的缺省值。
第七章 抽象类和接口
一. 抽象类
用abstract修饰的类就是抽象类
抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。
在下列情况下,一个类成为抽象类
(1) 当一个类的一个或多个方法是抽象方法时
(2) 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法主体时
(3) 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法主体时
“抽象类一定包含抽象方法”是错误的。当时反过来说“包含抽象方法的类一定是抽象类”就是正确的了。
二.接口
接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
接口也可以继承,子接口可以继承父接口中的常量和抽象方法。
接口特性:
(1) 接口中声明的属性默认为,也只能是 public static final的,所以在常量声明时可以省略这些修饰符。
(2) 接口中只能定义抽象方法,这些方法默认为,也只能是public abstract的,所以在声明这些方法时也可以省略这些修饰符。
(3) 和继承父类相似,java类可以实现接口。
接口的作用:
(1) 声明方法,期望一个或更多的类来实现该方法。
(2) 揭示一个对象的编程接口,而不揭示类的实际程序体。
(3) 捕获无关类之间的相似性,而不强迫类关系。
(4) 可以作为参数传到其他对象上调用的方法中。
三.多重接口
一个类只可以继承一个父类,但可以实现多个接口,而不需要在继承树中同属一个族。一个类实现多个接口就被称为多重接口。
四.接口基本思想
封装,隔离
接口及相关机制的最基本作用在于:通过接口可以实现不相关类的相同行为,而不需考 虑这些类之间的层次关系。
根据接口可以了解对象的交互界面,而不需了解对象所属的类。
面向对象程序设计讲究“提高内聚,降低耦合”。
五.接口作为类型使用
接口的使用:
ClassA a = new ClassA(); 正确
InterfaceA a = new InterfaceA(); 错误
InterfaceA a = new ImplementsA(); 正确
后边就可以使用a.method()来调用接口的方法了。
有需要的可以到java 私塾官网下载完整笔记:www.javass.cn/javapeixunzlxz/zlxz.html |
|