关于java的一些易错知识

1:Student stu=new Student();
等号左边是创建类时
等号右边是创建对象时

创建类时代码执行顺序:静态属性只加载不执行->
静态块加载并执行->静态方法只加载不执行(静态的东西只加载一次)

创建对象时代码执行顺序:一般属性只加载不执行->代码块加载并执行->普通方法加载不执行(非静态的可加载多次)

exe:
package 易错;

public class Student {
 public static int age = 0;

 static {// 静态块
  age++;
 }

 {// 代码块
  age++;
 }

 public Student() {//构造方法
  age++;
 }

 public void study() {//普通方法
  age++;
 }

 public static void play() {//静态方法
  age++;
 }

}




package 易错;

public class Test {
 public static void main(String[] args) {
  Student stu = new Student();//1
  Student stu1 = new Student();//2
  stu.study();//3
  stu.play();//4
  stu1.study();//5
  stu1.play();//6
  Student.play();//7
  
  System.out.println(stu.age);
  System.out.println(stu1.age);
  System.out.println(Student.age);

 }
}


会输出什么呢? 答案是10 10 10
首先age是静态的,三个输出肯定相同,这无可置疑。

Student stu = new Student();//1
先看这行代码:Student stu (创建类时) 先加载静态属性age,静态块加载并执行age=1;静态方法加载不执行,age不变。new Student()(创建对象时)先加载一般属性,但是没有一般属性。代码块加载并执行age=2;一般方法加载不执行,age不变,其次创建对象还会调用构造方法,age=3;第一行代码执行完毕后  age=3;


Student stu1 = new Student();//2
再看第二行代码
Student stu1 (创建类时) 因为静态的东西只会加载一次,所以没必要去算,age不变。new Student()(创建对象时)先加载一般属性,但是没有一般属性。代码块加载并执行age=4;一般方法加载不执行,age不变,其次创建对象还会调用构造方法,age=5;第二行代码执行完毕后  age=5;


stu.study();//3
stu.play();//4
stu1.study();//5
stu1.play();//6
Student.play();//7
一个方法执行一次 ,age加五次就变成10了。

2:this()和super()必须放在构造函数的第一行,因此一个构造函数不允许同时出现this()和super().this()和super()不能在static环境使用,因为static是静态的,属于类本身的,没有对象,而this()和super()使用了对象。


3:final可以修饰普通类,方法,属性。final修饰的类不能被继承,修饰的方法不能被重写,修饰的属性不能被再次赋值。被static final 修饰的常量必须赋初值。构造方法可以重载,不能重写

4:public(整个工程任一类) >protected(同一个包下的类,不同包下的子类) >默认的(default)(同一个包下的类)>private(当前类)

5:抽象类{属性:常量,变量。方法:抽象方法,构造方法,普通方法。不能被创建对象,单继承}

接口{常量,抽象方法(必须有且只能有这种方法),多继承,不能创建对象}

6:try catch
   try catch finally
   try finally
 exe:

public class Demo{
public int add(int a int b){
   try{
       return a+b;}
   catch(Exception){
   System.out.println("catch");
}
finally{
    System.out.println("finally");
}
}
}
public static void main(String[]args){
   System.out.println("和是"+new Demo().add(1,2));

输出:finally 和是3
先执行try 执行return 但不会立马返回3,会等待finally执行完毕再返回3.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值