标识符与关键字

标识符可以用来标识变量名,类名,类中方法名和文件名等

命名规则:

1.由字母,数字,下划线,$组成,不能以数字开头

2.大小写敏感

3.不得使用java中关键字和保留字。(java中null,true,flase不是关键字,是字面量)

static关键字

static静态关键字修饰:属性,方法,内部类,代码块。

static属性:

1.static修饰的资源属于类级别,是全体对象实例共享的资源。

2.静态属性:使用static修饰的属性,属于类的变量。静态属性是在类的加载期间初始化的,使用类名.属性访问。

3.实例变量:属于对象的属性。使用对象.属性访问

static方法:

1.使用static声明的方法,属于类的方法,一般用来表示工具类。

2.在类加载后就可以调用,不需要创建实例对象。

3.staic修饰的方法,不能访问本类中非静态成员,但本类的非静态方法可以访问苯类的静态成员。

4.在静态方法中不能出现this关键字。

静态代码块:

1.静态代码块是在类加载期间运行的代码块,由于类只加载一次,所以静态代码块只执行一次

2.静态代码块一般是用来加载和初始化一些静态资源时使用(如加载配置文件)。

java中main方法必须写成static的原因是在类加载时无法创建对象,而静态方法可以不用通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。

final关键字

final修饰的类:不能再被继承。

1.java的String就是final类,不能再被继承

2.Math是final类,不能被继承

3.Integer,Long,Character等包装类是final类,不能被继承

final修饰的方法:不能被重写

final不能用来修饰构造方法

final修饰的变量:初始化以后不允许在被修改了,指引用变量不能变,引用变量所指向的对象中的内容还是可变的。

对于此语句:final StringBuffer a = new StringBuffer("abc"); //String和StringBuffer都可以存储和操作字符串
                 String类是字符串常量,是不可更改的常量。而StringBuffer是字符串常量,它的对象是可以扩充和修改的。
                     执行此操作:a = new StringBuffer("a");   -- 编译器错误。
                     但执行此操作: a.append("def");   -- 通过编译。

final:用于声明属性,方法,类。分别表示属性不可变,方法不可覆盖,类不可被继承。内部类要访问局部变量,局部变量必须定义为final类型。
 finally:是异常处理语句结构的一部分,是异常的统一出口。
(finalize:是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,
                  可以覆盖此方法提供垃圾收集器时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。)

抽象abstract

抽象类,只有声明而没有实现;抽象方法,只有行为的概念,没有具体的行为实现

1.(类中方法)使用abstract关键字修饰,并且没有方法体

2.包含抽象方法的类,就一定是抽象类

3.抽象类不能直接创建实例。可以定义引用变量

4.抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法。(定义的抽象方法必须在子类中实现,所以不能有构造方法或者抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类)

5.抽象方法和抽象类非常适合作为系统的分析和设计的工具

tips:方法一时间想不到怎么被实现,或有意要子类去实现而定义某种标准,这个方法可以被定义为抽象。

注意不能同时使用的修饰符

1.abstract和final不能同时使用,这连个关键字有着相反含义。abstract修饰方法和类,就是想让别人重写或者继承的, 而final是阻止重写和继承的。
2.private和abstract也不能同时修饰方法。因为private是阻止继承,也就阻止了重写实现,与abstract的意义相违背。

abstract和interface的区别

接口(interfa)可以说是抽象类的一种特列,接口中所有方法都必须是抽象的。
接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
区别:1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量。
 3.抽象类中可以包含非抽象的普通方法,接口中所有方法都必须是抽象的,不能有非抽象的普通方法。
4.抽象类中可以包含静态方法,接口中不能包含静态方法。
5.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型;
6.一个类可以实现多个接口,但只能继承一个抽象类。

两者在应用上的区别
接口更多的是在系统架构设计方法发挥作用,主要作用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重要性,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Sevlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在
                              各个子类中只是完成各自的业务逻辑代码。
                               -----------------------------------------------------------------------------------------
                        伪代码:
                               public abstract class BaseServlet extends HttpServlet{
                                   public final void servlce(HttpServletRequest request,HttpServletResponse response)throws
                                    IOExection,ServletException{
                                    //记录访问日志
                                    //进行权限判断
                                     if(具有权限){
                                            try{
                                            doService(request,response);
                                            }cath(Exception e){
                                             //异常信息
                                            }
                                      } 
                                    }                          
                               proteced abstract void doService(HttpServletRequest request,HttpServletResponse response)
                                    throws IOExection,ServletException;
                                      //注意访问权限定义成protected,因为它是专门留给子类用的。
                                   }
                               class MyServlet1 extends BaseServlet{
                                 protected void doService(HttpServletRequest request,HttpServletResponse response)throws
                                    throws IOExection,ServletException{
                                    //本Servlet只处理的具体业务逻辑代码
                                  }
                             }
 tip:比较两者语法细节区别的条理:先从一个类中的构造方法、普通成员变量和方法(包括抽象方法),静态变量和方法,继承性等6个方面逐一去比较。

this关键字:this是对当前对象的引用,是运行期间当前对象本身。
           1.可以使用this明确的访问当前对象的属性或者方法,类似于“我”。
           2.this()可调用本类的其他构造器,可以使用构造器的重用简化代码的实现。
           3.this()必须写在构造器的第一行。(在构造器之前是没有对象的)
           4.this不能出现在静态方法里面。
         -------------------------------------------------------
         public class Point{
          int a;
          int b;
          public Point(int a,int b){
            this.a = a;
            this.b = b;
           }
         }

上一篇:面向对象(16):修饰符


下一篇:Java 初级 final 关键字