java学习笔记(三)java中的修饰符abstract、static与final

一、四种访问级别的访问范围

访问级别 访问修饰符 同类 同包 子类 不同的包
公开 public
受保护 protected
默认 没有访问修饰符
私有的 private

二、使用abstract修饰符需要遵守的语法规则

1、抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰;

2、抽象类跟抽象方法不能被final修饰符修饰;

3、抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法;

4、抽象方法没有方法体;

5、如果子类没有重写父类中的抽象方法,则子类也必须定义为abstract。

package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午2:52
 * To change this template use File | Settings | File Templates.
 */
public abstract class AbstractDemo {
    public abstract void xxx();
}

abstract class Test extends AbstractDemo {
//    public void xxx(){}   //用abstract修饰子类,或者重写父类中的抽象方法
}

作用:实现多态。

三、修饰符static

static可以用来修饰成员变量,成员方法,代码块。

1、被static修饰的成员变量和成员方法,可以直接用类名.静态变量或静态方法直接调用;

2、被static修饰的代码块称为静态代码块,当java虚拟机加载类时,就会执行该代码块。

注:静态变量与实例变量的区别是:java虚拟机只会为静态变量分配一次内存,而没创建一个实例变量虚拟机就会为其分配一次内存。其作用是能被类的所有实例共享,可作为势力之间进行交流的共享数据。例如我们在项目中经常会执行同样的SQL语句,这样每次都要写一次sql语句未免显得过于繁琐,我们可以专门写个类用于存放哪些常用的SQL语句,里面只定义各种需要重复执行的SQL语句的静态变量。

package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午3:45
 * To change this template use File | Settings | File Templates.
 */
public class StaticDemo {
    public static final String sqlStr = "SELECT * FROM DUAL";
}

class A extends StaticDemo{
    StaticDemo a = new StaticDemo();
    public static void main(String[] args) {
        System.out.println(StaticDemo.sqlStr);
    }
}
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的.静态代码块的作用可用于初始化类,给类的成员变量赋值等等。
package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午4:04
 * To change this template use File | Settings | File Templates.
 */
public class StaticProgram {
    static {
        System.out.println("静态代码块执行");
    }

    public static void main(String[] args) {
        //运行结果:输出“静态代码块执行”
    }
}

四、final修饰符

final意为“不可改变的”,可以修饰非抽象类、非抽象成员方法和变量。

1、被final修饰的类不能被继承,没有子类;

2、被final修饰的方法不能被子类的方法覆盖;

3、用final修饰的变量表示常量,只能被赋值一次;

package wbb.java.modifies;

/**
 * Created with IntelliJ IDEA.
 * User: wbb
 * Date: 14-7-17
 * Time: 下午4:10
 * To change this template use File | Settings | File Templates.
 */
public final class FinalDemo {
    private static final int num = 1;

    public static void main(String[] args) {
//        num ++; 被final修饰的变量不能改变
    }
}

//class TestFinalClass extends FinalDemo {} 被final修饰的类不能被继承

class TestFinalFun {
    public final void finalFun() { }
}

class TestFinalFun2 extends TestFinalFun {
//    public void finalFun() { }  被final修饰的方法不能被重写
}

java学习笔记(三)java中的修饰符abstract、static与final,布布扣,bubuko.com

时间: 2024-10-26 15:22:58

java学习笔记(三)java中的修饰符abstract、static与final的相关文章

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

Java学习笔记(Java语言规范,API,JDK,IDE)

Java语言规范:java.sun.com/docs/books/jls 三个版本的API:J2SE J2EE J2ME 1. J2SE 客户端独立应用程序或者applet 2. J2EE 服务端应用程序 [Java Servlets&JavaServer Page] 3. J2ME 移动设备变成 JDK为Java开发提供一个开发环境(IDE) Java学习笔记(Java语言规范,API,JDK,IDE)

Java基础学习笔记三 Java基础语法

Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 = new 数据类型(); 每种引用数据类型都有其功能,我们可以调用该类型实例使用其功能. 变量名.方法名(); Scanner类 Scanner类可以完成用户键盘录入,获取到录入的数据. Scanner使用步骤: 导包: import java.util.Scanner; 创建对象实例:Scann

【JAVA学习笔记】Java中的static关键字解析

Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题.以下是本文的目录大纲: 一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题 若有不正之处,希望谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnb

JAVA学习笔记(三十二)- 字符流 FileReader & FileWriter

标题 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream;

Java学习笔记三(对象的基本思想一)

1 面向对象编程(OOP)的基本思想 面向对象就是描述对象和对象之间的相互作用:和面向过程编程的区别:面向过程编程时首先确定算法,再确定数据结构:OOP是先确定数据结构,在确定运算. 对象有两个特征:状态和行为:把相似的对象规化为一类,在软件中类就是一个模板,它定义了通用于一个特定种类的所有对象的所有状态和方法: 类是创建对象的模板,对象的类的实例: 2 类的入口函数和构造函数 (1)类的入口函数定义为 public static void main(Sting [] args) 当一个类中有m

JAVA学习笔记(三十三)- 字节流转换为字符流

将字节流转换为字符流 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; /* * InputStreamRead

JAVA学习笔记(三十四)- 字节打印流 PrintStream

PrintStream字节打印流 import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.Reader; /* * Pri

JAVA学习笔记(三十九)- 线程优先级

线程优先级 /* * 线程优先级,范围[1,10] * 不同优先级的线程获取执行的机会不同,优先级越高,执行机会越大 * * 对比不同优先级的线程被执行的机率 */ public class Test05 { public static void main(String[] args) { System.out.println("最大优先级:" + Thread.MAX_PRIORITY); System.out.println("最小优先级:" + Thread.