Java笔记——包,final,static
1. 包:
允许类组成较小的单元,易于找到和使用相应的文件
防止命名冲突
更好的保护类,属性和方法。
package com.hwadee.ttip;
包命名规范:
包名由小写字母组成,不能以圆点开头和结尾
包名之前最好加上唯一的前缀,通常使用组织机构倒置的网络域名, 如:www.edu.cn
package cn.edu.mypackage;
包名后续部分依不同机构内部的规范不同而不同
package cn.edu.javagroup.powerproject;
为了使用不再同一包中的类,需要在java程序中使用import关键字导入这个类
import java.util.*;
import cn.edu.ttip.UserService;
语法:import 包名.类名;
2.final和static
1、final
1)、final表示“最终”
final在类之前:表示该类不能被继承
final在方法之前:表示该方法不能被覆盖
final在变量之前:定义一个常量
2)、final类
//这是一个final类,它不可被子类继承
public final class FinalClass {
//这是常量定义,表示值不可更改
public final double PI=3.1415;
}
//子类不可以继承final类
/*
class SubFinalClass extends FinalClass{
}
*/
3)、final方法:
public class FinalMethod {
//方法不能在子类中被重写
public final double Division() {
return 1.0;
}
}
//演示子类不可重写final方法
class SubFinalMethod extends FinalMethod{
/*
@Override
public double Division() {
// TODO Auto-generated method stub
return super.Division();
}*/
}
4)、final类和abstract类:
abstract类不能直接产生属于这个类的对象,只有创建子类后才可以实例化
final类不能被其他任何类所继承。
2、static
static在变量或方法之前,表明他们属于类范围的,称为类方法(静态方法)或类变量(静态变量)
若变量或方法之前无static修饰,则是实例方法和实例变量
1)、静态属性:
类变量在各个实例间共享
类变量的生存期不依赖于对象,相当于c语言中的全局变量的作用,其他类可以不通过实例化访问他们。
public class StaticVar {
public static int number=3;
}
public class OtherClass {
public void method() {
int x=StaticVar.number;
}
}
2)、静态方法:
类方法相当于C语言中的全局函数,其他类不用实例化即可调用他们。
public class GeneralFunction {
public static int addUp(int x,int y) {
return x+y;
}
}
public class UseGeneral {
public void method() {
int a=9;
int b=10;
int c=GeneralFunction.addUp(a, b);
}
}
3)、静态变量/方法和实例变量/方法
静态变量/方法都是使用类名引用
实例变量/方法必须先创建实例对象,然后使用实例对象引用
public class StaticAndInstanceDemo {
private int id=1; //实例变量
public static int number=3; //静态变量
public int getId() { //实例方法
return this.id;
}
public static int addUp(int x,int y) { //静态方法
//this.id; //在静态方法中不能使用this
return x+y; //在静态方法中只能访问静态变量或者静态方法
}
}
4)、完整例子
//static是违反了面向对象原则的。
//所有静态变量、静态方法的使用都不需要创建对象实例
public class StaticClass {
//静态代码块
//这些代码在加载类的字节码后立即执行,不需要创建对象实例
static {
System.out.println("static block 2");
}
static {
System.out.println("static block 1");
}
//静态变量保存在方法区,由所有的对象实例所共享
//静态变量类似于全局变量,在并发环境中会出现同步问题。
//在面向对象编程中不应该使用静态变量,如果要使用static修饰变量,通常和final配对使用来定义常量。
public static final double PI=3.1415;
private int i;
public StaticClass() {
System.out.println("构造方法被调用");
}
//静态方法
//直接使用“类名.静态方法名”调用
//静态方法中不可以使用this,因为它执行时并不需要对象存在。
public static void method1() {
System.out.println("静态方法被调用");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("StaticClass.PI:"+StaticClass.PI);
StaticClass.method1();
}
}