Day7
一、构造方法(构造函数、构造器)
- 构造器的作用:在创建这个对象的时候,给成员属性赋值,但只能赋值一次
- 构造器的语法:访问权限 + 类名(参数1、参数2、、、参数n){ this.成员属性 = 参数 }
- 访问权限:public、private(只能本类进行访问)
- 构造器的名字必须与类名完全一致(包括大小写)
- 构造器的参数的类型必须与成员属性的类型对应上
构造器不能通过对象来调用,是由JAVA的jvm来执行的,在创建这个对象的时候有且只执行一次
构造方法注意事项:
1.可以有无参数构造器,也可以有有参构造器
2.如果没有定义构造方法,系统会给类提供一个默认的构造方法(无参构造方法),如果类内写了任意一种构造方法,则系统不会提供
3.一个对象在创建的时候,只会运行一个构造方法
4.构造方法的重载:在同一个类里,方法的名字相同,参数的个数不同或者参数的类型不同,与返回值没有关系
5.构造方法没有返回值(不能填写任何返回类型),不能写“void”和“return+值;”,可以写“return;”表示结束
- set与构造方法的区别:
1.相同点:都可以赋值
2.不同点:构造方法只能在创建的时候赋值一次,而set方法可以赋值多次
3.使用场景:这个成员变量需要多次赋值的时候,就使用set,只需要赋值一次的时候就使用构造方法
二、静态类型(static)
- 没有静态之前:相同数据会在内存里开辟多个新的空间,占用内存,后期维护麻烦
- 有静态之后:静态的数据都存储在内存的静态空间里,静态区间又在方法区里(静态属性的值也存储在方法区里),实现数据的共享,可以节省内存
在开发的过程中尽量少使用,会影响代码运行效率
1.静态是随着class的加载而加载(影响用户的体验度)
2.静态优先于对象的存在,不依赖与对象
3.静态的调用方式不同,可以通过类名直接调用,也可以通过对象名调用,一般建议通过类名调用
静态的调用的语法:类名 . 属性或方法的名称(Actor.name)
注意点:静态方法里只能是静态的成员属性或方法(局部的变量不能定义为静态的)
- 静态是最先随着类进行加载的,不是静态的成员属性或方法也会随着静态块的加载而加载,但堆里面还没有加载不是静态的成员属性或方法,所以会出现异常,即静态方法里一定只能是静态的成员属性或方法
- 普通的方法是可以加载静态的资源(属性、方法)
- 静态可以修饰属性、方法、类等
静态变量与成员变量的区别:
1.俗语不一样:静态变量又称类变量
2.存储的位置不一样:静态变量存储在方法区的静态区间里,成员变量存储在堆里
3.生命周期与创建的时间不一样:普通成员变量的生命周期随着对象(new)的创建而开始,随着对象的销毁而结束;静态成员变量随着类的加载就创建,随着类的运行结束而结束
4.调用的方式不同:成员变量或方法通过(对象名 . 属性或方法),静态成员变量或方法通过(类名 . 属性或方法)
变量作用域的问题:一般是就近原则,也就是取这个变量近的值
三、数组工具类的封装
package com.yxlim.utils;
import java.util.Scanner;
/**
* @author 小Lim
* 简单的数组操作
*/
public class ToolUtils {
//私有一个构造器
private ToolUtils(){}
//遍历数组
public static void Traverse(int[] array){
if(array!=null&&array.length>0){
System.out.print("[");
for(int i=0;i<array.length;i++){
if(i==array.length-1){
System.out.print(array[i]+"]");
break;
}
System.out.print(array[i]+", ");
}
System.out.println();
}
}
//数组排序
public static int[] sortArray(int[] array){
if(array!=null&&array.length>0){ //判断数组是否为空
for(int i=0;i<array.length-1;i++){
for(int j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
return array;
}
//交换两个数据
public static boolean isFlag(int[] array,int start,int end){
if(array!=null&&array.length>0){
if(start>=0&&end<=array.length-1){
int temp=array[start];
array[start]=array[end];
array[end]=temp;
return true;
}
}
return false;
}
//动态创建数组
public static int[] addArray(int num){
int[] nums=new int[num];
Scanner input=new Scanner(System.in);
System.out.print("请输入你要添加的数:");
for(int i=0;i<num;i++){
nums[i]=input.nextInt();
}
return nums;
}
//求数组中的最大值
public static int getMax(int[] array){
int temp = 0;
if(array!=null&&array.length>0) {
temp=array[0];
for (int i = 0; i < array.length; i++) {
if (temp < array[i]) {
temp = array[i];
}
}
}
return temp;
}
}
工具类一般命名为ToolUtils(方便开发人员相互使用):
- 不想实现对象,使用私有(private)访问权限,所有方法定义为静态(static)
四、文档注释
- 标注这个类或者方法是由谁来编写的,确定好挖坑人
- 编译成class文件看不懂,只有看注释才能确定方法还有类的作用
/**
* @author 小Lim
* @since 数组的工具类
* @version 1.0
*/
五、API帮助文档
- 描述一些工具的方法以及作用,还有构造信息等等
- 对数组的处理的工具类:Arrays
1.binarySearch(int[] array,5)查找数组元素的索引位置
2.equals(double[] array1,double[] array2)比较数组里的具体的值 <完全一致才返回true>
== 比较的是内存的地址
3.fill(int[] array,int val)向数组array里填充val值
4.sort(array)对数组进行排序
5.toString(array)将数组里的数以字符串的格式输出