public class Point {
int x;
int y;
public String toString() {
/*
* this 表示当前实例
* 正在执行,正在调用的实例
* this. 可以省略,缺省存在
*/
return this.x + ", " + this.y;
}
-
在构造方法中,
- this表示正在新建的“这个”实例
l 变量
n 局部变量
u 手动初始化
u 作用域,大括号结束
u 作用域内,不能重复定义
n 成员变量
u 自动初始化成默认值
u 访问范围受访问控制符的控制
u 局部变量可以和成员变量同名
2 类
对事物、算法、逻辑、概念等的抽象定义
“类”是对象的模板、图纸
3 对象、实例
从类创建出的具体实例
每个对象占用独立的内存空间,来保存各自的属性数据
4 引用变量
保存一个实例的内存地址
理解成“遥控器”
引用变量的特殊值:null,空引用
5 构造方法
新建实例时执行的特殊方法
类必须有构造方法
如果不定义,编译器编译时,会添加默认构造方法
6 this
l this.xxxx
l this(…)
6.1 this.xxx
this是一个特殊的引用,引用当前对象的内存地址
6.2 this(…)
构造方法之间调用
目的是减少代码重复
一般从参数少的方法,调用参数多的方法
必须是首行代码
9.1 创建字符串
char[] a = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’};
String s = new String(a);
l 第一种语法的简化语法:
String s = “hello”;
9.2 字符串的字面值
“hello”
如果第一次用到一个字符串字面值,会在内存中“字符串常量池”新建对象
再次使用相同字面值时,直接访问常量池中存在的实例,而不新建
package day0704;
public class Test1 {
public static void main(String[] args) {
char[] a = {'h', 'e', 'l', 'l', 'o'};
String s1 = new String(a); //内存中新分配内存空间
String s2 = "hello"; //常量池新建对象
String s3 = "hello"; //访问常量池存在的对象
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s1 == s2);//内存地址不相等
System.out.println(s2 == s3);//内存地址相等
System.out.println(s1.equals(s2));//比较字符内容
9.3 字符串不可变
字符串一旦创建,他的字符串内容不可变,任何对字符串修改的操作,都是在新建字符串
字符串的加号连接效率低,因为每次连接,都是新建字符串实例
9.4 字符串的方法
length():获取字符串长度
charAt(int index):获取指定位置的字符
equals():判断两个字符串的内容是否相同,相同返回true
indexOf(String str):查找子串的起始位置下标,没有返回 -1
indexOf(String str, int start):从start 位置向后找
lastIndexOf(String str):从后向前找获取指定字符串的位置
substring(int begin):截取子串,指定开始位置一直到结束为止都会被截取到
substring(int begin,int end):截取子串,[begin, end) 指定开始位置和结束位置
10 StringBilder
可变的字符序列
封装char[]数组,提供了一组对内部字符修改的方法
常用来代替字符串,做高效率的字符串连接运算
10.1 append() 方法
sb.append(“abcabc”)
StringBuilder 内部数组默认初始长度是 16,
存满之后,翻倍增长
10.2 StringBuilder 和 StringBuffer
StringBuffer
l 是一个旧版本的类,jdk1.0
l 线程安全,效率低
StringBuilder
l 是新版本的类,jdk1.5
l 线程不安全,效率高
10.3 StringBuilder的方法
append()
追加内容
insert(i, str)
插入子串
delete(start, end)
删除 [start, end)
deleteCharAt(i)
删除单个字符