java基础知识回顾之关键字

其实java中的常用关键字并不多,总共加起来也没有多少个,具体见如下这张表:


private,protect,public


在java中,在类,类的属性和累的方法前面加上一个修饰符来对其进行访问权限上的控制。除了使用private,protect,public之外,

还有一种是default情况,即使不加任何权限修饰符.关于这四中情况的权限差别见下表:

注意:default不是修饰符,他表示一种不加任何修饰符的情况。

这里,主要看一看static,instanceof,final关键字的含义和如何应用。

static关键字


static关键字可以修饰方法,属性,自由块和内部类。使用static关键字时可以理解这些成员与类相关,通过
“类名.成员”形式访问,没有static修饰的成员可以理解为与对象相关,可以通过“对象.成员”的方式访问。

1.static修饰方法

最典型的是修饰main方法,main()是java应用程序的入口,之所以用static修饰main方法,原因是解析器在调用该方法时,还没来及创建当前类对象。

注意:static定义的方法,不能调用没有static修饰的方法和属性,也不能使用this和super关键字。

2.static修饰属性

当static修饰属性时,调用方法除与修饰方法的调用类似外,还有一个特性,就是这个属性被多个当前类对象共享,一个对象修改类静态属性值时,会影响其他对象。

3.static修饰自由块

自由块是用{}括起来代码段,自由块中的代码在构造方法之前执行,因此可以将一部分初始化代码放在自由块中执行。

当自由块用static修饰时,自由块就成了静态自由块,通常用于初始化静态变量。静态自由块与类相关,因此只要类被加载,即使没有创建对象,自由块也被执行,且只执行一次。示例如下:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

public class Test {

    

    private
static int
i;

    static{

        i=0;

        System.out.println("自由块被执行!");

        i++;

    }

    

    public
void show(){

        System.out.println("i的值:"+i);

    }

    public
static void main(String[] args) {

        // TODO Auto-generated method stub

        Test t1 = new
Test();

        t1.show();

        Test t2 = new
Test();

        t2.show();

    }

}

  结果:

自由块被执行!
i的值:1
i的值:1

可见,尽管创建了t1,t2两个对象,自由块还是只被执行了一次。

final关键字


final可以修饰类,成员变量和方法。

1. final修饰类时,表示该类不能被继承,例如String,Math等类。如果你不希望自己的类别其他类继承,就用finalo修饰。

2. final修饰成员变量,表示该成员变量是一个常量,在定义时必须赋值。


public class Demo{
public static void main(String []args){
final Person p = new Person("adu");
p.setName("xiaochuan");
System.out.println("the person‘s name is :"+p.getName());
}
}

3. final修饰方法,表示该方法不能在子类重写。

如果final修饰的是一个简单类型的的常量,则该变量一旦被初始化后,就不能修改。

如果修饰的是引用型变量,那么该变量的引用不可以改变,但可以通过该引用修改引用对象的属性值。

instanceof关键字


instanceof是一个二元操作数,类似于 ==, > ,
<等,用于判断一个对象是否为某个类或接口类型。由于java语言的多态性,是的一个子类的实例赋值给其父类的变量,因此可以用instanceof关键字来判断该变量的原有类型,返回true或false.

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

/*

 * 定义父类

 */

public class Animal {

  

}

/*

 * 定义Animal子类Dog

 */

public
class Dog extends
Animal{

   public
void f1(){

       System.out.println("汪 汪");

   }

}

/*

 * 定义Animal子类Sheep

 */

public
class Sheep extends
Animal{

  public
void f2(){

      System.out.println("咩咩");

  }

}

/*

 * 定义测试类Test

 *

 */

public
class Test {

    

    public
static void main(String[] args) {

    /*利用累的多态show方法的参数,提高参数传递的额灵活性*/

    public
static void show(Animal a){

        if(a instanceof
Dog){

            Dog dog = (Dog)a;

            dog.f1();

        }else
if(a instanceof
Sheep){

            Sheep sheep = (Sheep)a;

            sheep.f2();

        }

    }

}

  主要在变量使用多态时,可以使用instanceof来判断,执行不同的操作。

java基础知识回顾之关键字,布布扣,bubuko.com

时间: 2024-10-12 13:44:21

java基础知识回顾之关键字的相关文章

java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

/** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存放所有new出来的对象. *   静态存储:存放静态成员(static定义的). 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float.int等).另外,可以存储不经常改变的东西 *                       p

java基础知识回顾之面向对象

一 . 抽象类 什么是抽象类?很简单,就是用abstract关键字修饰,并允许包含未实现方法的类. 什么时候定义抽象类?在有些情况下,可能有些方法无法确定要怎么实现,这时就可以定义抽象类,无法实现的方法定义成抽象方法. 抽象类的特性: 1. 不能实例化,即不能创建对象,只能作为父类被继承. 2. 子类继承一个抽象类后,必须实现父类的抽象方法. 3. 抽象类中可以有抽象方法,也可以不包含抽象方法,但如果包含抽象方法,就必须定义成抽象类. public abstract class Shaoe{ p

Java基础知识回顾之七 ----- 总结篇

前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数据类型 基本数据类型主要有: byte.short.int.long.float.double.char.boolean 它们可以分为三类: 数值类型:byte.short.int.long.float.double 字符类型:char 布尔型:boolean 其中byte是8位,short是16位

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *