static、final关键字、public等四种权限修饰符

一、static关键字

1. static的概念

在这里插入图片描述

2. 成员变量使用static

成员变量加了static之后,这个成员变量不再属于某一个单独的对象,而是属于这个类创建出来的所有对象。所有对象共享同一数据。修改一个对象的静态成员变量,所有对象的此成员变量都会一起改变

3. 示例:学号自动填充并递增
```java
//student类
package linxu.day02;
public class student {
    private String name;
    private int age;
    private int id;
    private static int idCOunter;
    public student(String name, int age) {
        this.name = name;
        this.age = age;
        this.id = idCOunter++;
    }
    public student() {
        idCOunter++;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.id = age;
    }
    public int getid() {
        return id;
    }
    public void setid(int id) {
        this.age = id;
    }
}
//主函数
package linxu.day02;
public class randomdome {
public static void main(String[] args) {
    student p = new student("ww", 9);
    System.out.println(p.getName() + " " + p.getAge() + " " + p.getid());
	student q = new student("ss", 8);
    System.out.println(q.getName() + " " + q.getAge() + " " + q.getid());
    }
}
```
4. 静态方法

成员方法加了static之后,这个成员方法不再属于某一个单独的对象,而是属于这个类。即使不创建对象也可以直接使用,即直接类名.方法名()来调用静态方法。并且更推荐使用类名称来调用,哪怕已经有了创建的对象。
例如:
```java
package linxu.day04;

public class staticdome1 {
    public static void staticMothod(){
        System.out.println("这是一个静态方法");
    }
}

package linxu.day04;
public class dome2 {
    public static void main(String[] args) {
        
        staticdome1 p=new staticdome1();
        p.staticMothod();//通过对象调用静态方法,
       //即使通过类名调用静态方法,在javac编译器编译之后也会翻译(java是解释型语言)为“类名.方法名”
        staticdome1.staticMothod();//通过类名调用静态方法
    }
}

```
5. 注意事项:
- 对于调用本类当中的静态方法,可以省略类名称,直接使用方法名调用
- 静态不能直接访问非静态(方法、变量);
因为在内存中是先有静态内容,然后才有非静态的内容的。
- 静态方法不能使用this关键字,
因为this代表当前对象,谁调用中国这个方法,this就表示谁。但静态方法是通过类名调用的,而非对象调用,因此会报错。
6. static的内存图

方法区中有一块单独的区域——静态区
在这里插入图片描述

7. 静态代码块

当第一次使用本类,静态代码块执行唯一的一次。
静态内容总是优先于非静态,所以静态代码块比构造方法更早执行
格式:

```java
public class  类名{
	static{
		静态代码块内容
	}
}
```
主要作用:一次性的为所有静态成员变量赋值

二、final关键字

1. final关键字
  • 表示最终不可改变的,(相当于C语言的const)
  • 四种用法:
    修饰类
    修饰方法
    修饰局部变量
    修饰成员变量
2. final修饰类

格式:public final class类名{...}
含义:当前类不能有任何子类,其他和普通类相同。
注意:一个类如果是final的,那么其中所有方法都无法进行覆盖重写

3. final修饰方法

格式:修饰符 final 返回值类型 方法名(参数列表){方法体...}
含义:当前方法就是最终的方法,无法被覆盖重写
注意:abstract、final不能一起用,自相矛盾

4. final修饰局部变量

格式:final 返回值类型 变量名=数据值;
含义:final修饰的局部变量,一旦赋值,不可改变,
注意:

  • 对基本类型,不可改变的是其数值;对引用类型,不可改变的是其变量地址
  • 定义时最好初始化,否则就直接默认值了,变量没啥意义了
5. final修饰成员变量

格式:private final 返回值类型 变量名=数据值;
含义:final修饰的成员变量,一旦赋值,不可改变
注意:

  • 加了final的成员变量,编译器不会给默认值,因此必须手动赋值。
  • 对于成员变量,要么手动赋值,要么构造方法赋值,不能通过成员方法赋值

三、权限修饰符

java四种权限修饰符:

public > protected > (default) > private

(default)不是关键字,而是什么也不写

publicprotected(default)private
同一个类YESYESYESYES
同一个包YESYESYESNO
不同包子类YESYESNONO
不同包非子类YESNONONO

这个表格表示的信息如下:
如第一行,表示同一个类中使用这些权限修饰符修饰的成员变量和成员方法之间是否能相互访问。
第二行,表示同一个包中某个类中使用这些权限修饰符修饰的成员变量和成员方法是否能在其他类中创建对象并访问

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值