ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

标识符与关键字

2021-12-14 12:00:32  阅读:111  来源: 互联网

标签:方法 abstract 关键字 抽象 static 抽象类 标识符 final


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

命名规则:

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

标签:方法,abstract,关键字,抽象,static,抽象类,标识符,final
来源: https://blog.csdn.net/m0_65240507/article/details/121922367

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有