一、 第五章
调试断点debug
1、定位逻辑错误(设置断点)
2、启动调试
3、单步执行,观察变量
4、修改
null与" "是有区别的,后者分配了空间
调用方法
当一个方法正在执行时,有三种情况
1、方法返回一个值
2、方法不反回一个值
3、方法抛出一个异常给调用者(以后专门讨论)
方法签名
方法签名包括访问修饰符、可选修饰符、 方法名、参数列表、返回值的数据类型等信息
例如: public static double random()
访问修饰符
public、private、protected
可选修饰符
static、final、abstract、native、synchronized.
用static修饰的方法为静态成员,为类的所有对象共享
在静态方法中,只能够直接调用静态成员,不能直接调用非静态成员
静态成员的调用,通过类名打点的方式调用
在成员方法中(未被static修饰的方法),可以直接调用静态成员与非静态成员
形式参数与实际参数 按值调用 方法重载(真他妈机智的方式,也叫做静态的多态)
当一个类有两到多个同名但是有不同参数列表的方法时,就是方法重载。
重载一个方法,只要方法的形式参数列表对编译器来说是截然不同时,就会方法重载。
与参数的类型相关,与名字无关。
例如:getDay(int year)与getDay(int day)不是方法重载
而println()中如果输入不同的参数就可以调用不同的方法
构造器 Person someOne = new Person();
注意:构造方法的名字必须和类名一致,构造方法没有返回类型
默认情况下,类中有一个无参构造方法
例如:public Person( ){
}
并且我们可以在这个构造方法中初始化数据。
除此之外,我们可以创建一个含参数的构造方法。
注意:如果我们写出了有参构造器时,系统不会再产生无参构造器,如果要使用,必须自己重新再写。
构造器是一个特殊的方法,它在类创建一个实例时被调用执行。
构造器的目的是初始化类的实例,使其成为一个有效的状态。
只要是一个对象被创建,构造器中再调用同一个类中其他的构造器,用到this语句 (必须要是构造语句中的第一句)。
例如: public Person(int stuNum,char name){
}
public Person(int stuNum,char name,String age){
this(stuNum,name);
}
比较字符串的大小
忽略大小写.equalsIgnoreCase( );
二、第六章
数组
什么是数组?
数组是存储在一个连续的内存块中的元素集合
数组中的每个元素必须是相同的数据类型,并且通过索引 进行区分。
数组中的第一个元素的索引为0
为什么要使用数组?
单一值类型变量有时候很难满足应用程序的设计要求。
数组类型变量可以同时存储多个同类型基础数据类型变量或对象。
创建数组
声明数组
int score [];
int [] score;//提倡使用的方式 分配空间
score = new int [10];(分配空间后,默认的值是0)
ArrayIndexOutOfBoundExceotion(数组下标越界)
声明并分配空间
int [] score = new int [10];
初始化
score [0] = 1;
声明、分配空间并初始化
int [] score = new int []{1,2,3,4,5};
int [] score = {1,2,3,4,5};//不能分开成两条语句
数组的大小(长度)
用到length属性
例如:for(int i = 0;i < score.length;i++){ sum += score; }
int avg = sum / score.length;
java中的数组是对象
补充
循环结构for each:用于数组或者集合的遍历操作
用法:for(单个数据类型 变量 : 数组或集合的名称){
}
例如: for (int item : score){ sum += score; }
注意:不可以通过item改变数组元素的值
对象数组/* 难点 */
User [] users = new User[100];
数组拷贝
使用Arrays.copyof(oraginalArrays,length)
int [] score = new int []{1,2,3,4,5};
int [] temp = Arrays.copyof(score,score.length);
数组的排序(升序)
签名 public static void sort(int [] a)
多维数组
arrays[行][列]
arrays.length 的结果值是行数
arrays[0].length的结果是列数
如何遍历?
for (int [] is : arr){
for(int [] i : is){
}
}
三、JVM
java程序运行在JVM上
JVM是java程序和操作系统之间的桥梁
JVM实现了java的平台无关性
JVM是内存分配原理的基础与前提
内存分配
——寄存器
JVM内部虚拟寄存器,存取速度非常快,程序不可控制
——栈(First in,last out)
保存局部变量的值,包括:
1、用来保存基本数据类型;
2、保存类的实例(即堆区对象)的引用(指针)
——堆
用来存放动态产生的数据,比如new出来的对象。
注意创建出来的对象只包含属于各自成员变量,并不包含成员方法。
因为同一个类的对象拥有各自的成员变量,存储在各自的堆中。
——java运行过程涉及的内存区域
1、常量池
常量池就是这个类型用到的常量的一个有序集合
例如字符串的创建
String str = "abc";
这里是在常量池中查找或者创建abc,再由栈引用常量池中的值
而String str2 = new String("abc");(这儿会创建两个对象,分别在堆和常量池中)
先在堆中拷贝下常量池中的值,再由栈引用堆中的值
注意: System.out.println(str == str2);比较的是地址的值,返回false;
2、代码段
3、数据段
字符串常用的方法
测试后缀名字是否相同
public boolean endswith(String suffix);
返回指定字符在此字符串中第一次出现的索引
public int indexOf(int ch);
返回值是否为空
public boolean isEmpty();
当且仅当length()为0时返回true.
分割字符串
public String[] split (String regex);
Regex
结果 : { "boo", "and", "foo" }
o { "b", "", ":and:f" }
返回一个新的字符串,它是此字符串的一个子字符串。
该子字符串从指定索引处的字符开始, 直到此字符串末尾。
public String substring(int beginIndex);
示例:
"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" (an empty string)
使用默认语言环境的规则
将此 String 中的所有字符都转换为小写
public String toLowerCase();
使用默认语言环境的规则将此
String 中的所有字符都转换为大写
public String toUpperCase();
返回字符串的副本,忽略前导空白和尾部空白(去掉前后空格)
public String trim();
字符串的拼接
String name = "张三";
String address = "成都";
String infor = name + address;
StringBuilder = new StringBuilder();
四、补充
在字符串中,length是一个属性,后面不加括号
而在求字符串的长度的时候,调用的是一个方法,length后面要加括号
访问修饰符
本类 同一包中不同类 不同包 子类
public ? ? ? ?
protected ? ? ?
default ? ?
private ?
注:?表示可以使用