类是一个模板,它描述一类对象的行为和状态。类可以看成是创建Java对象的模板,
通过下面一个简单的类来理解下Java中类的定义:
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
public Dog(){
}
public Dog(String name){
}
public static void main(String[] args){
Dog myDog = new Dog("tommy");
}
}
其中包含的变量有如下3种类型:
(1)局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
(2)成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
(3)类变量:类变量是声明在类中,方法体之外且声明为static类型的变量。
另外,类中还包含一系列的方法,其中与类同名的方法为构造方法,一个类可以有0到多个构造方法(多个构造方法通过其输入参数进行区分),如果类中没有定义构造方法,java编译器会提供一个默认的构造方法。
类是一个模板,通过类可以使用关键字new创建一个对象:声明->实例化->初始化。
我们经常会遇到需要使用对象,而不是内置数据类型的情况。为了解决这个问题,Java语言为提供了一些包装类如Character类、Math类;
1.Character类
使用Character的构造方法创建一个Character类对象:
Character ch=new Character('a');
在某些情况下,Java编译器会自动创建一个Character对象(当一个char类型的参数传递给需要一个Character类型参数的方法时,那么编译器会自动地将char类型参数转换为Character对象。 这种特征称为装箱,反过来称为拆箱。)。
下面是Character类的常用方法:
方法名 | 作用 |
Character.isLetter(c) | 判断字符c是否为字母 |
Character.isDigit(c) | 判断字符c是否为数字 |
Character.isWhitespace(c) | 判断字符c是否为空白字符 |
Character.isUpperCase(c) | 判断字符c是否为大写字母 |
Character.isLowerCase(c) | 判断字符c是否为小写字母 |
Character.toUpperCase(c) | 返回字符c的大写形式 |
Character.toLowerCase(c) | 返回字符c的小写形式 |
Character.toString(c) | 返回字符c的字符串形式 |
2.String类
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了,如果需要对字符串做很多修改,那么应该选择使用StringBuffer或StringBuilder类
字符串之间的连接:"Hello, "+"World!",若要求更高,可使用format()方法创建格式化字符串,以一个例子说明:
String fs;
fs = String.format("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
下面介绍一些String类常用的方法:
方法名 | 作用 |
s.charAt(i) | 返回指定索引处的字符,i从0到len-1 |
s1.compareTo(s2) | 比较字符串s1与s2;相等返回0,s1 |
s1.compareToIgnoreCase(s2) | 按字典顺序比较两个字符串,不考虑大小写。 |
s=s1.concat(s2) | 将指定的字符串参数连接到字符串上 |
s.contentEquals(sb) | 将此字符串与指定的 StringBuffer 对象比较;相等返回true,不相等返回false |
s.copyValueOf(char[] d,int of=0,int co=len) | 返回指定数组中表示指定(偏移量,长度)字符序列的字符串。 |
s1.endsWith(s2) | 测试字符串s1是否以指定的后缀s2结束 |
s.equals(obj) | 将字符串s与指定的对象obj比较 |
s1.equalsIgnoreCase(s2) | 将字符串s1与字符串s2比较,不考虑大小写。 |
s.getBytes(charseName) | 使用指定的字符集charseName将字符串编码为 byte 序列后返回,charseName缺省则使用平台默认字符集 |
s1.getChars(sbe,sen,s2,dbe) | 复制字符串s1从sbe到sen的子序列到字符数组s2的dbe偏移处 |
s.hashCode() | 返回字符串s的哈希码 |
s1.indexOf(s2,int from=0) | 返回从from位置开始查找指定字符在字符串中第一次出现处的索引 |
s1.intern() | 返回字符串对象的规范化表示形式。 |
s1.lastIndexOf(s2,int from=len-1) | 返回子字符串s2在字符串s1中最后一次出现处的索引,从指定的索引开始反向搜索。 |
s.length() | 返回字符串s的长度 |
s.matches(regex) | 检测字符串是否匹配给定的正则表达式 |
s1.regionMatches(boolean ignoreCase=false,of1,s2,of2,len) | 检测两个字符串子序列s1[of1..of1+len-1]与s2[of2..of2+len-1]是否相等,ignoreCase决定是否忽略大小写 |
s2=s1.replace(oc,nc) | 返回将s1中oc替换为nc后的新字符串s2 |
s1.replaceAll(regex,s2) | 使用给定的字符串s2替换字符串s1中所有匹配正则表达式regex的子字符串 |
s1.replaceFirst(regex,s2) | 使用给定的字符串s2替换字符串s1中第一个匹配正则表达式regex的子字符串 |
String[] s2=s1.split(regex,int lim) | 根据匹配正则表达式regex来拆分字符串s1为字符串数组s2,lim设定拆分组数,缺省则全部拆分 |
s1.startsWith(s2,int from=0) | 检测字符串s1是否以指定的前缀开始,from设定开始查找的索引 |
CharSequence s2=s1.subSequence(from,end) | 返回一个新的字符序列,它是此序列从from到end的一个子序列。 |
s2=s1.substring(begin,end) | 返回字符串s1从begin(包括)到end(不包括)的子序列 |
s2=s1.toCharArray() | 将字符串s1转换为字符数组s2 |
s2=s1.toLowerCase() | 将字符串s1转换为小写 |
s2=s1.toUpperCase() | 将字符串s1转换为大写 |
s2=s1.trim() | 返回删除字符串s1的头尾空白符之后的字符串 |
这里需要详细说明一下的是intern()方法,虽然看上去字符串使用这个方法之后像什么都没有做,但是后台会进行一系列的动作:在调用”ab”.intern()方法的时候会返回”ab”,但是这个方法会首先检查字符串池中是否有”ab”这个字符串,如果存在则返回这个字符串的引用,否则就将这个字符串添加到字符串池中,然会返回这个字符串的引用。
字符串相加的时候,都是静态字符串的结果会添加到字符串池,如果其中含有变量则不会进入字符串池中。
3.StringBuffer与StringBuilder
当需要对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 的方法不是线程安全的(不能同步访问),StringBuffer是线程安全的,但是对StringBuffer进行操作的话速度较慢。下面介绍一些StringBuffer类的方法:
方法名 | 作用 |
s1.append(s2) | 将字符序列s2追加到字符序列s1之后 |
s.reverse() | 将此字符序列反转。 |
s.delete(start, end) | 移除字符序列中从start到end的字符 |
s.insert(offset, i) | 将i的字符串表示形式插入字符序列s的offset偏移处 |
s1.replace(start, end, s2) | 将字符序列从start到end段用字符串s2替换 |
s.capacity() | 返回当前容量 |
s.ensureCapacity(min) | 确保s的容量至少为min |
s.setLength(nlen) | 将字符序列s的长度设置为nlen |
4.Math类
java提供了便于数学运算的包装类(Integer、Long、Byte、Double、Float、Short)与Math类(实现了常见的数学运算):
方法名 | 作用 |
num.xxValue() | 将包装类对象num转换为xx数据类型的值并返回 |
x.compareTo(y) | x>y返回1,x=y返回0,x |
x.equals(y) | x=y返回1,否则返回0 |
xx b=xx.valueOf(a) | 将a转换为xx类型的b |
Integer b=Integer.valueOf(Sring a,int radix) | 返回以radix进制的字符串a的十进制值 |
x.toString() | 返回x的字符串形式 |
xx.toString(a) | 将xx类型的a转换为字符串 |
Integer.parseInt(String a,int radix=10) | 将字符串参数作为有符号的radix进制整数进行解析,返回其int类型的值 |
Math.abs(x) | x是基本数据类型,返回x的绝对值 |
Math.ceil(x) | 对x向上取整 |
Math.floor(x) | 对x向下取整 |
Math.rint(x) | 返回距离x最近的整数 |
Math.round(x) | 对x四舍五入 |
Math.min(x,y) | 返回参数中的最小值 |
Math.max(x,y) | 返回参数中的最大值 |
Math.exp(x) | 返回自然数e的参数次方 |
Math.log(x) | 返回参数x的自然数e为底的对数值。 |
Math.pow(x,y) | 返回x的y次方 |
Math.sqrt(x) | 返回x的平方根 |
Math.sin(x) | 返回以x为角度的正弦值 |
Math.cos(x) | 返回以x为角度的余弦值 |
Math.tan(x) | 返回以x为角度的正切值 |
Math.asin(x) | 返回以x的反正弦值 |
Math.acos(x) | 返回以x的反余弦值 |
Math.atan(x) | 返回以x的反正切值 |
Math.atan2(y,x) | 即atan(y/x) |
Math.toDegrees(x) | 将弧度x转换为角度 |
Math.toRadians(x) | 将角度x转换为弧度 |
Math.random() | 返回随机数 |