Java笔记——包,final,static

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();
    }

    }

你可能感兴趣的:(Java)