1.类是用来创建对象的模板,对象(也称为实例)是程序的自包含元素,他们包含相关的特性和数据。
2.可以使用new运算符和要创建的对象所属的泪的名称,并加上圆括号
String name = new String();
URL addr = new URL();
3.StringTokenizer类,位于java.util包中。它将一个字符串划分为一系列叫做标记(token)的字符串
StringTokenizer st1 = new StringTokenizer(quote1);
默认分解符:空格' ',水平制表符'\b',换行'\n',回车'\r',换页'\f'
StringTokenizer st2 = new StringTokenizer(quote2,"@");
用@分割
使用st1.nextToken()读取下一个子串
4.程序运行时,Java定期地查询未使用的对象,并收回这些对象所咱用的内存。这种被称为无用单元收集,完全自动。不必显示的释放对象占用的内存。
5.类变量是在类中定义和存储,它们的值适用于类及其所有实例
类变量定义的方法是在前面加上关键字static
引用类变量时使用类名,(用变量也可以),代码更容易阅读,出错也好调试。
6.String类的一些方法
str.length();//长度
str.charAt(5);//返回地5个字符
str.substring(1,7);//返回从1到7的子字符串
str.indexOf('V');//返回字符V的下标
str.indexOf("IBM");//返回字符串IBM开始位置的下标
str.toUpperCase();//返回字符串的大写版
7.System.out.format()格式化输出。
%,d 显示十进制数,且每三位用逗号隔开
%n 回车
%.11f 显示包含11位小数的值
8.对象的引用
引用是一个地址,它指明了对象的变量和方法的存储位置。
将对象付给变量或将其作为参数传递给方法时,使用的是对象的引用。
A a1 = new A();
A是类名,a1 是引用,new A()才是对象,a1引用指向new A()这个对象。
在Java 中,"="不能看做是一赋值语句,他不是把一个对象的赋给另一个对象,它执行过程实质是将右边的对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。
总结:
初始化时,“=”语句左边的是引用,右边是new出来的对象
在之后,左右都是引用的"="语句时,左右的引用同时指向了右边的引用指向的对象。
9.强制转换基本类型
有一种基本数据类型用于不能用于强制类型转换中,布尔值要么是true 要么是false,不能用于强制类型转换操作中
通常可以将byte或者char用作是int,将int用作float或long。
将任何数字类型用作double
在大多数情况下,由于更大的数据类型的精确度比小类型高,所以不会导致信息丢失。
一种例外——将整数转换为浮点数,将int或者long转换为float ;long转换为double时,都可能导致精确度降低。
总结:
可以的:byte/short -> int ; int -> float/long ; anything ->double
不可以:? -->boolean ;boolean --> ?;
精度降低:int /long ->float ; long ->double.
10.将大类型值转换成小类型时,必须显示地进行强制类型转换,否则将导致精确降低。
(typename) value
int result = (int)(x/y);由于强制类型转换的优先级高于算数云散,所以必须使用圆括号,否则,x先被转换成int,然后被除。
11.强制转换对象
(1)在需要子类对象的地方使用超类对象,必须显示地进行强制类型转换。
在转换过程中,不会损失任何信息,而是得到了子类定义的全部方法和变量
(2)(classname)object;
强制类型转换中创建了一个classname对象的引用,原来的对象继续存在。
(3)VicePresent是Employee的一个子类。
Employee emp = new Employee();
VicePresent veep = new VicePresent();
emp = veep;// 在该使用超类对象时使用子类对象----ok
veep = (VicePresident) emp ;//在该使用子类对象时,使用超类对象要要显式的强制类型转换
(4)除了强制转换成某种类之外,还可以将对象强制转换为接口,但是,仅为该对象的类或者其超类之一实现了该接口才行。
将对象转换为接口,意味着可以调用该接口的方法,即使该对象的类并没有实现这个接口。
12.基本类型不可以和对象之间进行转化
自动封装和拆封:一种自动转换过程,处理表示用一类值的基本类型和对象时更为容易
自动封装自动地将基本类型转换为对象,而拆封执行相反的操作
Float f1 = new Float (12.1F);
Float f2 = new Float (37.9F);
System.out.println("Lower number: " + Math.min(f1,f2));//自动拆封
13. == 和!=用于对象时不时判断一个对象的值是否等于另一个对象的值,而是判断运算符两端引用的是否是用一个对象。
14.字符串字面量在Java中是经过优化的:
如果使用字面量创建一个字符串,然后用相同的字符内容来重新创建它时,Java将返回原来的String对象。这样两个字符串将是同一个对象——并没有创建两个不同的对象
15.判断对象所属的类
(1)判断赋给变量key的对象所属的类
String name = key.getClass().getName();
getClass()是在Object类中定义的,因此所有的对象都可以用这种方法,这种方法返回一个Class对象(Class是一种类),对象的getName()返回一个表示类名的字符串
(2)instanceof运算符
Instanceof有两个操作数:左边为对象的引用,右边是类名
boolean check1 = "Texas" instanceof String;//true
Point pt = new Point(10,10);
boolean check2 = pt instaneceof String;//false