一.导入包
import java.util.Arrays; //导入包
//1.导包
//import 包名称.类名称
import javaClass.Student;
//2.创建对象,使用类
//类名称 对象名 = new 类名称();
//3.使用
//对象名.成语方法/变量;
二.Java类内存分布
- 将类的内容放入方法区,再放入main函数
- 2.再在栈中调用main函数
- 3.创建一个类的实例即对象,在堆中new一个新的类,放入成员变量,以及成员方法的地址,然后将堆中类的地址放入栈的实例中
- 4.未修改前,通过实例在堆中的地址调用成员变量默认值
- 5.通过地址修改堆中的成员变量值
- 6.调用成员方法,通过栈到堆,堆到方法区的地址将方法区中的类方法压入栈中
- 7.调用后再将方法出栈
特殊情况
1.两个引用指向同一个对象
Student stu2 = stu1;
相当于把地址传给了新的对象,共同指向堆中的一个实例
2.将类对象作为参数传递给函数或者是作为函数的返回值,实际上是将对象的地址值进行了传递
三.局部变量与成员变量比较
1.定义的位置不一样
局部变量:在方法内部
成员变量:在方法的外部,直接写在类当中
2.作用范围不一样
局部变量:只有方法中才能使用,出了方法后不能再使用
成员变量:整个类都可以通用
3.默认值不一样:
局部变量:无默认值
成员变量:会有默认值
4.内存的位置不一样
局部变量:位于栈
成员变量:位于堆
5.生命周期不一样
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被解构而消失
三.类的注意事项
1.面向对象的三大特征:继承、封装、多态
2.间接访问或者修改private关键字修饰成员变量,需要使用Getter/Setter方法
命名规则为setXXX或者getXXX,如果是boolean变量则写成isXXX的形式
3当方法的局部变量和类的成员变量同名时,根据就近原则,优先使用局部变量
通过谁调用的方法,谁就是this
四.类构造方法与类的组成部分
格式:public 类名称(参数类型 参数名称){}
public Student()
{
System.out.println("!!");
}
注意事项:
- 1.构造方法一定不要有返回值类型,void也不需要写
- 2.不能return返回值
- 3.如果没有任何构造方法显式定义,那么编译器将会自动定义一个构造方法,没有参数,不做任何事情
- 4.一旦编写了一个构造方法,编译器就不再自动定义构造方法
一个标准的类包含四部分
- 1.所有的成员变量用private关键词修饰
- 2.为所有成员变量定义一对Getter/Setter的方法
- 3.编写一个无参数的构造方法
- 4.编写一个全参数的构造方法
五.static修饰符(重点)
定义:多个对象共享同一个相同数据,只在类当中保存唯一一份,内容不再属于对象自己而是属于类的
1.修饰成员方法
public static void methodStatic(){
System.out.println("Static");
}
非静态方法需通过对象调用
静态方法则可以推荐对象或是类名调用(推荐)
Student.methodStatic();
对于本类当中的静态方法进行调用,可以省略类的名称
(1)静态方法可以访问静态变量,不能直接访问非静态
原因:因为在内存当中是现有的静态内容后有非静态内容
(2)静态方法中不能用this
原因:this代表当前对象,通过谁调用的方法谁就是当前对象,而静态方法编译时是调用的类的方法,没有对象
2.静态代码块
static{
System.out.println("!!!!");
}
//当第一次用到本类时,静态代码块执行唯一一次
//静态内容总是优先于非静态,所以会先执行静态代码块中内容然后再执行构造函数内容
六.Arrays常用方法
1.toString()
将参数数组变成字符串
int[] array = {10,20,30,40};
System.out.println(Arrays.toString(array));
2.sort()
- 按照默认升序对数组的元素进行排序
- 如果是字符串进行sort则会按照字母升序
- 如果是自定义类型,需要有Comparable或者Comparator接口的支持
示例代码:
String[] array2 = {"bbb","aaa","ccc"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));
or接口的支持
示例代码:
String[] array2 = {"bbb","aaa","ccc"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));