final:是个修饰符,它可以用来修饰类,类的成员:成员变量、成员方法,以及局部变量。
1.final可以修饰一个类,被final修饰的类不能被继承,但是可以继承其他类
2.子类无法重写被final修饰的方法
3.final修饰的变量称为常量,这些变量只能赋值一次。
4.修饰成员变量,需要在创建对象前赋值,否则报错。 (当没有显式赋值时,多个构造方法均需
要为其赋值)
static:static是静态修饰符,可以修饰类的成员:成员属性、成员方法。
1.static修饰成员方法通过类名来调用
2.非静态可以访问静态,因为静态先存在,非静态后存在,(就像:后人可以瞻仰前人,但是前人无法瞻
仰后人)
静态无法访问非静态
3.静态成员随着类的加载而加载,静态优先于对象存在
4.静态内容是优先于对象存在,只能访问静态,在静态方法中不能使用this/super关键字。静
态修饰的内容存于方法区。
5.同一个类中,静态成员只能直接访问静态成员
6.多个对象共享同一个静态成员变量
7.定义静态常量,通常使用public static final来修饰某个变量,静态常量命名规范全部大写,
多个单词之间用下划线分隔。
包的声明与访问
1.包的概念和作用
当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理。
作用:为了便于后期管理,为了分类管理
2.包的定义格式
通常使用公司网址反写,可以有多层包,包名采用全部小写字母,多层包之间用”.”连接
com.whhp.xxx.xxx
类中包的声明格式:
package 包名.包名.包名…; (注意:声明包的语句,必须写在程序有效代码的第一行(注释不
算))
3.包的访问:
两个类在不同包下,必须使用含有包名的类全名(包名.类名)来访问。
包名.包名….类名
如: java.util.Scanner
java.util.Random
带有包的类,创建对象格式:包名.类名 变量名 = new包名.类名();
java.util.Scanner scan=new java.util.Scanner(System.in);
当我们要使用一个类时,这个类与当前程序在同一个包中(即同一个文件夹中),或者这个类是
java.lang包中的类时通常可以省略掉包名,直接使用该类
匿名对象
1.匿名对象在没有指定其引用变量时,只能使用一次。
2.匿名对象创建格式:new 类名();
3.创建匿名对象直接使用,没有变量名。
new Person().eat() //eat方法被一个没有名字的Person对象调用了。
匿名对象在没有指定其引用变量时,只能使用一次。
new Person().eat(); 创建一个匿名对象,调用eat方法
new Person().eat(); 想再次调用eat方法,重新创建了一个匿名对象
4.匿名对象可以作为方法接收的参数使用
public class Person2 {
int number;
Person2(){}
Person2(int number){
this.number = number;
}
public static void main(String[] args) {
// f1();
//Person2 p = new Person2();
fun2(new Person2(4));
}
private static void fun2(Person2 p) {
System.out.println(p.number);
System.out.println(“类的类型作为方法的参数”);
}
private static void f1() {
//类名 对象名 = new 类名();
Person2 p = new Person2();
Person2 p2 = new Person2(4);
//匿名对象
new Person2();
new Person2(4);
}
}
代码块
- 局部代码块
- 局部代码块是定义在方法或语句中
特点:
以”{}”划定的代码区域,此时只需要关注作用域的不同即可
方法和类都是以代码块的方式划定边界的
public class BloackDemo {
static int x = 5;
public static void main(String[] args) {
//局部代码块
{
int x =5;
System.out.println(x);
}
//x的作用域只限于代码块内部
System.out.println(x); //访问静态的成员变量
//对象调用 静态成员变量(不建议这样调用)
new BloackDemo().x = 6;
}
}
静态代码块
静态代码块是定义在成员位置,使用static修饰的代码块。
特点:
它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
该类不管创建多少对象,静态代码块只执行一次。
可用于给静态变量赋值,用来给类进行初始化。
。
public class Demo1 {
static int i;
//静态代码块访问静态成员变量
static {
i = 5;
System.out.println(“静态代码块执行了,i的值:”+i);
}
{
System.out.println(“构造代码块执行了…”);
}
Demo1(){
System.out.println(“构造方法执行了…”);
}
public static void method(){
System.out.println(“静态方法执行了…”);
public static void main(String[] args) {
new Demo1();
new Demo1();
//类名调用静态方法
Demo1.method();
}
}
构造代码块
构造代码块是定义在类中成员位置的代码块
特点:
优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作
每创建一个对象均会执行一次构造代码块。
代码块的执行顺序:静态代码块(执行1次)> 构造代码块 > 构造方法
静态代码块先与构造代码块执行 ,类加载的时候静态代码块只执行一次,构造代码块先与构造方法执行。