在how2j.cn 学习的java笔记
JAVA 基础 / 变量
- JAVA 基础 / 变量 / 变量系列教材 (六)- 什么是JAVA的作用域:
- 当一个变量被声明在类下面变量就叫做字段 或者属性、成员变量、Field。
- 如果一个变量,是声明在一个方法上的,就叫做参数
- 声明在方法内的变量,叫做局部变量
其作用域在声明开始的位置,到其所处于的块结束位置
- final 修饰一个变量,当一个变量被final修饰的时候,该变量只有一次赋值的机会
JAVA 基础 / 数组
-
JAVA 基础 / 数组 / 数组系列教材 (一):数组是一个固定长度的,包含了相同类型数据的 容器
- System.arraycopy(src, srcPos, dest, destPos, length)复制数组。与使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange 只需要源数组就就可以了,通过返回值,就能够得到目标数组了。
// copyOfRange(int[] original, int from, int to) // 第一个参数表示源数组 // 第二个参数表示开始位置(取得到) // 第三个参数表示结束位置(取不到) int[] b = Arrays.copyOfRange(a, 0, 3);
- 如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印
但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容。
int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; String content = Arrays.toString(a);
//使用binarySearch之前,必须先使用sort进行排序 System.out.println("数字 62出现的位置:"+Arrays.binarySearch(a, 62));
- 比较两个数组的内容是否一样。第二个数组的最后一个元素是8,和第一个数组不一样,所以比较结果是false
import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; int b[] = new int[] { 18, 62, 68, 82, 65, 8 }; System.out.println(Arrays.equals(a, b)); } }
- 填充
Arrays.fill(a, 5);
- System.arraycopy(src, srcPos, dest, destPos, length)复制数组。与使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
JAVA 基础 / 类和对象
- 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。
- 一旦提供了一个有参的构造方法
同时又没有显式的提供一个无参的构造方法
那么默认的无参的构造方法,就“木有了“。因此需要手动添加。 - this关键字:
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//打印内存中的虚拟地址
public void showAddressInMemory(){
System.out.println("打印this看到的虚拟地址:"+this);
}
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
//直接打印对象,会显示该对象在内存中的虚拟地址
//格式:Hero@c17164 c17164即虚拟地址,每次执行,得到的地址不一定一样
System.out.println("打印对象看到的虚拟地址:"+garen);
//调用showAddressInMemory,打印该对象的this,显示相同的虚拟地址
garen.showAddressInMemory();
Hero teemo = new Hero();
teemo.name = "提莫";
System.out.println("打印对象看到的虚拟地址:"+teemo);
teemo.showAddressInMemory();
}
}
如果要在一个构造方法中,调用另一个构造方法,可以使用this()
//带一个参数的构造方法
public Hero(String name){
System.out.println("一个参数的构造方法");
this.name = name;
}
//带两个参数的构造方法
public Hero(String name,float hp){
this(name);
System.out.println("两个参数的构造方法");
this.hp = hp;
}
- 访问限制:
- 属性通常使用private封装起来
- 方法一般使用public用于被调用
- 会被子类继承的方法,通常使用protected
JAVA 基础 / 接口与继承
- final修饰类,方法,基本类型变量,引用的时候分别有不同的意思。
- 当类被修饰成final的时候,表示类不能够被继承
其子类会出现编译错误 - Hero的useItem方法被修饰成final,那么该方法在ADHero中,不能够被重写
- final修饰基本类型变量,表示该变量只有一次赋值机会
16行进行了赋值,17行就不可以再进行赋值 - final修饰引用
h引用被修饰成final,表示该引用只有1次指向对象的机会
所以17行会出现编译错误
但是,依然通过h引用修改对象的属性值hp,因为hp并没有final修饰
- 当类被修饰成final的时候,表示类不能够被继承
- 注:String 类是final修饰的,不能被继承。