第五章. static,final与Java访问权限

1. Java关键字:static ,final

1.1 final 实例域:

这个域的值被设置,不能够再对它进行修改。
修饰:

  1. 方法
  2. 变量

1.2 final 类和方法

final类:不允许被继承
final方法:不允许被覆写的方法。

public final class Executive extends Manager
{}

public class Employee {
    public final String getName()
    { return name;}
}

1.3 静态static

静态域:又叫类域,存放在固定内存地址中,被所有类的对象共享。

修饰:

  1. 变量
  2. 方法
  3. 类(内部类?)
  4. 匿名方法块
class Employee { 
    private static int nextld = 1 ;//所有对象共享nextId = 1;
    private int id;
}

静态常量:静态变量使用得比较少,但静态常量却使用得比较多。

public class Hath {
public static final double PI = 3.14159265358979323846;
} 

静态方法:没有隐式参数,也就是没有this参数的方法,但可以访问自身类中的静态域。只能调用静态变量

public static int getNextld()
{
    return nextld; 
} 
int n = Employee.getNextl();//类名直接调用
  • 可以通过类名直接调用静态方法
  • 静态方法不能调用非静态方法,非静态方法可以调用静态方法

以下两种情况使用静态方法:

  • 方法不需要访问对象状态,其所需参数都是通过显式参数提供(例如: Math.pow)
  • 一个方法只需要访问类的静态域(例如:Employee.getNextldh)

1.4 单例模式

  1. 采用static 来共享对象实例
  2. 采用private 构造函数,防止外界new操作

1.5 常量池

:相同的值只存储一份,节省内存,共享访问

  1. Java为很多基本类型的包装类/字符串都建立常量池

  2. Java为常量字符串都建立常量池缓存机制

public class StringConstantTest {
	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "abc";
		String s3 = "ab" + "c"; //都是常量,编译器将优化,下同
		String s4 = "a" + "b" + "c";
		System.out.println(s1 == s2); //true
		System.out.println(s1 == s3); //true
		System.out.println(s1 == s4); //true
	}
}

基本类型的包装类和字符串有两种创建方式

  • 常量式(字面量)赋值创建,放在栈内存 (将被常量化)
    Integer a = 10;
    String b = “abc”;
  • new对象进行创建,放在堆内存 (不会常量化)
    Integer c = new Integer(10);
    String d = new String(“abc”);

2. 包与路径(package import)

  1. Java通过包(package)来存放、分开类
  2. Java通过 import 来导入类
  • 类的完整名字:包名 + 类名

2.1 包

即存放类的文件夹。

  • 同一目录下类的引用不需要声明,不同目录下类的引用需要import路径导入,编译时与之链接。
  • 使用包能确保类名的唯一性
  • 如果包与目录不匹配,虚拟机就找不到类 。

类的导入:

import java.time.*; //导入util的全部类
import java.time.LocalDate; //导入time的特定类
  • 只能导入一个目录下的所有类,不能导入一个目录下的所有文件

  • 如果两个包中有相同类,则增加一个特定的 import 语句

import java.util.*; 
import java.sql.*; 
import java.util.Date;
  • 如果这两个 Date 类都需要使用,则在每个类名的前面加上完整的包名。
java.util.Date deadline = new java.util.Date(); 
java.sql.Date today = new java.sql.Date(...); 

静态导入:
import 语句不仅可以导人类,还增加了导人静态方法和静态域的功能。

import static java.lang.System.*; //就可以使用 System类的静态方法和静态域,而不必加类名前缀
out.println("Goodbye, World!"); 

2.2 jar文件的导出和导入

jar文件:一种扩展名为jar的文件,是Java所特有的一种文件格式,用于可执行程序文件的传播。

  • jar文件实际上是一组class文件的压缩包

jar文件优势:

  1. jar文件经过压缩,只有一个文件,在网络下载和传播方面,更具有优势
  2. 将多个class文件压缩成jar文件(只有一个文件),可以规定给一个版本号,更容易进行版本控制

2.3 classpath

  • 包具体位置不重要,通过classpath来指定

3. java访问权限

Java访问权限有4种:
public:公开的,可以被任何类使用
private:私有的,只能被本类使用
protected:同一个包,子类均可访问
default(不写):同一个包类访问

  • 使用范围:
  1. 四种都可以用来修饰成员变量、成员方法、构造函数
  2. default和public可以修饰类
  • 推荐:
  1. 成员变量都是private
  2. 成员方法都是public
XXXXXXX同一个类同一个包不同包的子类不同包非子类
public
protected
default
private

引用自Mooc华师大的PPT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值