类和对象
- 类:是一组相关的属性和行为的集合。是一个抽象的概念。
- 对象:是该类事物的具体存在,是一个具体的实例。
变量
- 成员变量
- 局部变量
成员变量和局部变量的区别
- 在类中的位置不同
- 成员变量 类中方法外
- 局部变量 方法内或者方法声明上
- 在内存中的位置不同
- 成员变量 堆内存
- 局部变量 栈内存
- 生命周期不同
- 成员变量 随着对象的存在而存在,随着对象的消失而消失
- 局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值不同
- 成员变量 有默认的初始化值
- 局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
注意事项:局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
构造方法
注意事项:
- 如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
- 如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
- 这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
代码块
在Java中,使用{}
括起来的代码被称为代码块,根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。
- 局部代码块
- 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
- 构造代码块
- 在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
- 静态代码块 在类中方法外出现,加了static修饰
- 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载类的时候就执行,并且值执行一次。
class OOP {
static {
System.out.println("OOP static1");
}
//构造代码块
{
System.out.println("OOP 构造代码块1");
}
//构造方法
public OOP() {
System.out.println("OOP 构造方法1");
}
//构造方法
public OOP(int a) {
System.out.println("OOP 构造方法2");
}
//构造代码块
{
System.out.println("OOP 构造代码块2");
}
//静态代码块
static {
System.out.println("OOP static2");
}
}
class OOP1 {
static {
System.out.println("OOP1 static");
}
}
class OOP2 {
static {
System.out.println("OOP2 static");
}
public static void staticMethod() {
System.out.println("staticMethod");
}
}
class OOPDemo {
static {
System.out.println("static");
}
public static void method() {
System.out.println("method");
OOP1 oop1 = new OOP1();
}
public static void main(String[] args) {
System.out.println("main");
method();//类用到的时候static才加载
System.out.println("---------------");
//局部代码块
{
int x = 10;
System.out.println(x);
}
//找不到符号
//System.out.println(x);
{
int y = 20;
System.out.println(y);
}
System.out.println("---------------");
OOP c = new OOP();
System.out.println("---------------");
OOP c2 = new OOP();
System.out.println("---------------");
OOP c3 = new OOP(1);
System.out.println("---------------");
OOP2.staticMethod();//调用静态方法的时候不走构造方法和构造代码块,但是走静态代码块
}
}
// static
// main
// method
// OOP1 static
// ---------------
// 10
// 20
// ---------------
// OOP static1
// OOP static2
// OOP 构造代码块1
// OOP 构造代码块2
// OOP 构造方法1
// ---------------
// OOP 构造代码块1
// OOP 构造代码块2
// OOP 构造方法1
// ---------------
// OOP 构造代码块1
// OOP 构造代码块2
// OOP 构造方法2
// ---------------
// OOP2 static
// staticMethod
匿名对象
就是没有名字的对象。
匿名对象好出
匿名对象可以作为实际参数传递,调用完毕就是垃圾。可以被垃圾回收器回收。
以上概念总结于传智播客Java基础课程