精华内容
下载资源
问答
  • Java语法糖的定义
    2020-11-25 21:52:57

    Java有哪些语法糖

    • 泛型

    • 枚举类

    • 内部类

    • 边长参数

    • 数值字面量

    • foreach循环

    • 自动装箱和自动拆箱

    • switch对枚举类和字符串的支持
      ……

      很多人以为在java中能够方便开发人员使用的语法就是语法糖,其实并不然,对于语法糖,Java有着非常明确的定义。

    语法糖的定义

    语法糖具有如下几个特点:
    1) 能够方便开发人员编码;
    2) 会在编译阶段进行解语法糖,还原为基础语法;
    3) 对于JVM来说,加糖与不加糖没有任何区别。
    

    其中,编译阶段负责解语法糖的,是com.sun.tools.javac.main.JavaCompiler中的deSugar方法。

    此外,在Java代码运行时,JVM读取的是编译过后的.class二进制字节码文件,由于在编译阶段已经进行了糖解,因此JVM读取到的代码中不会存在语法糖,加糖和不加糖的写法,对于JVM来说也就没有区别了。

    更多相关内容
  • JAVA中的自定义方法的概念来自于封装 , 将一些代码写到方法里 , 在使用的时候直接调用 , 而不需每次使用的的时候都写一遍 , 或者就是多次使用的时候, 把代码块直接写到自定义方法里多次调用, 而不用去考虑具体细节,...

    JAVA中的自定义方法的概念来自于封装 , 将一些代码写到方法里 , 在使用的时候直接调用 , 而不需每次使用的的时候都写一遍 , 或者就是多次使用的时候, 把代码块直接写到自定义方法里多次调用, 而不用去考虑具体细节,直接用就行 , 自定义方法写好以后没有规定说必须要用 ,只是考虑到以后会使用到, 所以才会写这个自定义方法 , 各个方法之间都是平等的关系 ,没有谁高于谁 ,虽然方法中不能包含另一种方法, 但是方法中可以调用方法 ,且不仅限于一个.

    自定义方法的语法是 :修饰符 返回值类型 方法名(参数类型 参数名,…){执行代码;}

    举个例子:

    public static void maxtest(int a, int b) {
    	if(a>b) {
    		System.out.println(a);
    	}else {
    		System.out.println(b);
    	}
    }
    

    该例子就是一个自定义方法 , 名字是maxtest , 它所具有的功能是可以比较两个参数之间的较大数, 填入相应的int类型参数,可以输出两个数字之间的较大值,
    具体调用方法的方式:

    maxtest(1,5);	//1和5为参数
    

    在main方法中调用此方法 , 可以输出较大值是5, 就算互换了参数a和b的位置, 一样会输出5,因为if会判断1>5时,结果为假,就会输出else中的内容System.out.println(b); 打印出b

    方法中的参数具体可以放多少个没有规定, 取决于业务中的需求 , 同一个类中的方法名不允许一样, 如果非要起两个一样的方法名的话需要符合方法重载的规定,在调用该方法传值时,参数类型和位置要和方法中定义的参数类型和位置一样.

    此外,参数还分为形参和实参, 顾名思义, 形参就是形式参数 , 实参就是实际参数 , 那么 ,形参和实参如何区分呢?
    形参就是方法中定义的参数,这个名字可以随意起,是没有具体值的 ,它存在的意义就是告诉调用者想要使用这个功能必须输入相应类型的的值才可以运行
    实参就是调用者再使用的时候传输给方法的具体的值
    方法的返回值:
    需要对方法中的返回的结果再次处理的时候,就需要用到返回值.如果不需要用返回值的时候则不给返回值 这里需要注意的是void是无返回值类型, 在需要有返回值的方法中不能使用void类型,return有两种功能 1返回结果 2结束方法(函数)
    方法的重载:
    在同一个类的同一个作用域中是不允许出现相同的变量名字的,同一个类不允许出现相同的方法名字.但是,有些功能需要实现的方法名往往是相似的或者类似的, 那么这样就需要用到方法的重载,他们可以参数不同 类型,或者个数,这样, 在输入相应的数据类型和个数的数据后,会返回不同的结果, 这就是方法的重载.

    展开全文
  • Java自定义异常

    2020-12-22 16:41:21
     1)首先创建自定义异常类,语法格式:自定义异常类名 extends Exception。  2)在方法中通过关键字throw抛出异常对象。  3)若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,...
  • 非运行时异常(Checked Exception)Java中凡是继承自Exception但不是继承自RuntimeException的类都是非运行时异常。2. 运行时异常(Runtime Exception/Unchecked Exception)RuntimeException类直接继承自Exception类,...

    1.异常的分类

    1. 非运行时异常(Checked Exception)

    Java中凡是继承自Exception但不是继承自RuntimeException的类都是非运行时异常。

    2. 运行时异常(Runtime Exception/Unchecked Exception)

    RuntimeException类直接继承自Exception类,称为运行时异常。

    Java中所有的运行时异常都直接或间接的继承自RuntimeException。

    Java中所有的异常类都直接或间接的继承自Exception。

    2.异常的处理

    一、对应非运行时异常,必须对其进行处理。处理方式有两种:

    使用try…catch…finally语句块进行捕获

    在产生异常的方法所在的方法声明throws Exception

    二、对于运行时异常,可以不对其进行处理,也可以对其进行处理。一般情况下都不对其进行处理。

    在使用Java API的方法时会产生异常,由于实际的需要,我们需要创建和使用自定义异常。使用全新的异常类,应用到系统程序中。

    在介绍自定义异常时,首要先谈谈什么要使用自定义异常,使用自定义异常的好处。创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新的含义;可以显示代码多个位置之间的错误的相似处,也可区分代码运行时可能出现的相似问题的一个或多个错误,或给出应用程序中一组错误的特殊含义。

    应用场景

    服务器的基本作用是处理与客户机的通信,若使用标准Java API(如java.io和java.net包中的类)来编写服务器,则可使编写的代码在多个位置抛出IOException。在设置服务器、等待客户机连接和获取通讯流时,可抛出IOException,在通信期间及试图断开连接时,也会抛出IOException。简而言之,服务器的各个部分都是引发IOException。

    对于服务器而言,这样IOException意义不尽相同。虽然由同一异常类型表示,但与各个异常先关的业务含义存在差异,报告和恢复操作也不相同。所以,可以将一个异常集与服务器配置和启动问题关联,将另一个异常集与客户机通讯的实际行动关联,将第三个异常集与服务器关闭任务关联。使用自定义异常,可采用对应用程序有意义的方式来灵活地表示错误。

    为此,我们需要使用自定义异常来定为问题,定位问题与异常实际准确的位置。

    自定义异常类过程

    1. 多数情况下,只需要继承异常类Exception, 经常需要定义一个或多个构造函数,以在对象中存储错误消息。

    扩展:

    类java.lang.Throwable是所有异常类的基类,它包括两个子类:Exception和Error,Exception类用于描述程序能够捕获的异常,如ClassNotFoundException。Error类用于指示合理的应用程序不应该试图捕获的严重问题,如虚拟机错误VirtualMachineError

    自定义异常类可以继承Throwable类或者Exception类,而不要继承Error类。自定义异常类之间也可以有继承关系

    需要为自定义异常类设计构造方法,以方便构造自定义异常对象。

    在继承任何异常时,将自动继承Throwable类的一些标准特性,如:

    错误消息

    栈跟踪

    异常包装

    若要在异常中添加附加信息,则可以为类添加一些变量和方法。本例演示的自定义异常没有按照业务类型来命名,而是创建一个通用异常类,以retCd来区别发生异常的业务类型与发生位置,当然对于具体的retCd值,事先必须有具体的规定或说明。

    package com.example.exception;

    import lombok.Getter;

    /**

    * 多数情况下,创建自定义异常需要继承Exception,本例继承Exception的子类RuntimeException

    * @author: GuanBin

    * @date: Created in 上午11:39 2019/5/22

    */@Getter

    public classCustomerException extends RuntimeException {

    private String resultCode; //异常对应的返回码

    private String messageDescription; //异常对应的描述信息

    publicCustomerException (){

    super();

    }

    publicCustomerException (String massage){

    super(massage);

    messageDescription=massage;

    }

    publicCustomerException (String massage,String resultCode){

    super();

    this.resultCode=resultCode;

    this.messageDescription=massage;

    }

    }

    2. 声明方法抛出自定义异常。为了使用自定义异常,必须通知调用代码的类:要准备处理这个异常类型。为此,声明一个或多个方法抛出异常。找到异常发生点,新建异常并加上关键字throw。

    package com.example.java8test.exception;

    import com.example.exception.CustomerException;

    /**

    * @author: GuanBin

    * @date: Created in 上午11:46 2019/5/22

    */

    public classexceptionTest {

    public static voidmain(String[] args) {

    try{

    testException();

    } catch(CustomerException e) {

    e.printStackTrace();

    System.out.println("MsgDes\t" +e.getMessageDescription());

    System.out.println("RetCd\t" +e.getResultCode());

    }

    }

    public static voidtestException() throws CustomerException{

    throw new CustomerException("10","String[] strs's length < 4");

    }

    }

    以下的自定义异常的最佳实践,摘自网络,经过参考扩展使用。

    使用异常的最佳实践

    下面的部分我们列出了客户端代码处理 API 抛出异常的一些最佳实现方法。

    1. 记得释放资源

    如果你正在用数据库或网络连接的资源,要记得释放它们。如果你使用的 API 仅仅使用 unchecked exception,你应该用完后释放它们,使用 try-final。

    1 public voiddataAccessCode() {

    2 Connection conn = null;

    3 try{

    4 conn =getConnection();

    5 //..some code that throws SQLException

    6 } catch(SQLException ex) {

    7 ex.printStacktrace();

    8 } finally{

    9 DBUtil.closeConnection(conn);

    10 }

    11 }

    12

    13 classDBUtil {

    14 public static voidcloseConnection

    15 (Connection conn) {

    16 try{

    17 conn.close();

    18 } catch(SQLException ex) {

    19 logger.error("Cannot close connection");

    20 throw newRuntimeException(ex);

    21 }

    22 }

    23 }

    DBUtil 是一个关闭连接的工具类。最重要的部分在于 finally,无论异常发不发生都会执行。在这个例子中,finally 关闭了连接,如果关闭过程中有问题发生的话,会抛出一个 RuntimeException。

    2. 不要使用异常作控制流程之用

    生成栈回溯是非常昂贵的,栈回溯的价值是在于调试。在流程控制中,栈回溯是应该避免的,因为客户端仅仅想知道如何继续。

    下面的代码,一个自定义的异常 MaximumCountReachedException,用来控制流程。

    1 public voiduseExceptionsForFlowControl() {

    2 try{

    3 while (true) {

    4 increaseCount();

    5 }

    6 } catch(MaximumCountReachedException ex) {

    7 }

    8 //Continue execution }

    9 public voidincreaseCount ()throws MaximumCountReachedException {

    10 if (count >= 5000)

    11 throw newMaximumCountReachedException();

    12 }

    useExceptionsForFlowControl()使用了一个无限的循环来递增计数器,直至异常被抛出。这样写不仅降低了代码的可读性,也让代码变得很慢。记住异常仅用在有异常发生的情况。

    3. 不要忽略异常

    当一个 API 方法抛出 checked exception 时,它是要试图告诉你你需要采取某些行动处理它。如果它对你来说没什么意义,不要犹豫,直接转换成 unchecked exception 抛出,千万不要仅仅用空的{}catch 它,然后当没事发生一样忽略它。

    4. 不要 catch 最高层次的 exception

    Unchecked exception 是继承自 RuntimeException 类的,而 RuntimeException 继承自 Exception。如果 catch Exception 的话,你也会 catch RuntimeException。

    try{

    ..

    }catch(Exception ex){

    }

    上面的代码会忽略掉 unchecked exception。

    5. 仅记录 exception 一次

    对同一个错误的栈回溯(stack trace)记录多次的话,会让程序员搞不清楚错误的原始来源。所以仅仅记录一次就够了。

    总结:这里是我总结出的一些异常处理最佳实施方法。我并不想引起关于 checked exception 和 unchecked exception 的激烈争论。你可以根据你的需要来设计代码。我相信,随着时间的推移,我们会找到些更好的异常处理的方法的。

    展开全文
  • JAVA自定义异常类

    2017-04-27 09:38:21
    java基本语法自定义异常类
  • 06_Java基础语法_第6天(自定义类、ArrayList集合)_讲义
  • Java 自定义方法

    2021-03-01 07:15:59
    类1、JAVA中一般命名类要求pascal命名法,...而对象相当于这个模板产生的产品自定义方法语法:public 返回值类型 方法名(参数列表) {//方法体}自定义方法的基本步骤:1)定义方法名及返回值类型。2)编写方法主体。编...

    1、JAVA中一般命名类要求pascal命名法,就是有几个单词就首字母都大写

    2、类下可以直接写的内容是属性及方法的声明

    3、一个原则如果定义了类,一般不能直接调用,而是通过实例化类的对象出来,让他 工作

    4、类相当于一个模板,而对象相当于这个模板产生的产品

    自定义方法

    语法:

    public 返回值类型 方法名(参数列表) {

    //方法体

    }

    自定义方法的基本步骤:

    1)定义方法名及返回值类型。

    2)编写方法主体。

    编码规范:

    方法名称与类名及变量名命名一样,具有严格的命名规则:

    (1)必须与字母、下划线或“$”符号开头。

    (2)名称中可以包含数字,但是不得以数字开头。

    一个优秀的软件工程师,必须掌握良好的命名规范:

    (1)方法名首字母须小写。

    (2)方法名一般为动词,如果由两个以上的单词组成,第一个单词首字母小写,其后单 词首字母均大写。(驼峰命名法,俗称骆驼命名法)

    1、函数(funcyion)被放到类中,就成为方法(Method)

    2、方法的定义,主要使用camel命名法,首个单词字母小写,其余的,单词首字母全部大写

    一、无返回值,无参数方法

    public void climbTree(){

    System.out.println("猴子会爬树");

    }

    二、无返回值,但是有参数

    public void climbTree(String name){

    System.out.println("我是:"+name+"我上树了");

    }

    public void climbTree(String name,int metre){

    System.out.println("我是:"+name+"我爬了"+metre+"米");

    }

    三、有返回值,有参数方法

    public int add1(int i, int j){

    int rst =i+j;

    return rst;

    }

    四、有返回值,没参数(一般不这样写)

    public int add2(){

    return 100;

    }

    方法的调用】

    对象名.方法名();?????

    变量作用域

    命名规范:

    //包名命名规范

    //包名一概小写,最好不要有太多数字。

    //反域名机制:com.companyname.porjectname.moudlename

    使用包中的类

    //1.1、同包下的类直接使用

    Student stu = new Student();

    stu.sayHello();

    //2.2、同包下的类,可以写全称,但是有点冗余

    com.sowayai.text.Student stu2 = new com.sowayai.text.Student();

    stu2.sayHello();

    //2、使用不同包下的类

    //1、不同包下的类,可以写全称,但是也是有点冗余

    org.sowayai.text.Teacher teacher = new org.sowayai.text.Teacher();

    teacher.sayHello();

    //导入要用的包

    Teacher teacher2 = new Teacher();

    teacher2.sayHello();

    Employee ayi = new Employee();

    ayi.sellFood();

    //如果已经导入了一个A类,就不能再导入一个其他包下的同名类。

    //那么现在要用其他包下的同名类,只能写全称(包含包名的写法)

    cn.sowayai.text.Teacher t1= new cn.sowayai.text.Teacher();

    t1.sayHehe();

    //java.lang包下的类,不用导入直接使用即可

    double d = Math.random();

    System.out.println(d);

    //默认包,不位于任何包下的类叫默认包下的。默认包的类可以用其他包下的类,也可以用本包的类,

    //其他包用默认包下的类就困难了

    //建议将类写在包中

    展开全文
  • Java自定义注解
  • Java 自定义异常

    2021-03-03 10:42:34
    Java面向对象设计 - Java自定义异常我们可以创建我们自己的异常类。它们必须扩展现有的异常类。 class extends {}<Class Name> is the exception class name.创建一个MyException类,它扩展了java.lang....
  • 1、自定义lambda:示例中没有参数和返回值,实际可根据具体情况添加参数和返回值 package com.lemon.self.annotation.lambda; /** * lambda 使用: * 语法使用规则: (参数列表) -> {表达式} * * * ...
  • java自定义事件

    2017-03-17 10:21:01
    java自定义事件,有文档和示例代码
  • Java用户自定义函数

    千次阅读 2021-02-25 20:31:15
    自定义函数有3种方法。使用关键字 function 构造语法:function funcName([param1][,param2...}){statements;}使用 function 构造语法:var result = new function (['param1'][,'param2']...,'statements'...
  • 1.写在前面 目前我们学习Java主要用到的应该就是Java8...速度更快、代码更少(增加了新的语法 Lambda 表达式)、强大的 Stream API、便于并行、最大化减少空指针异常 Optional。 2.为什么要使用Lambda表达式? La
  • Java使用自定义

    2021-04-12 16:44:05
    Java使用自定义包包的声明和使用非常简单,在了解基本语法之后,下面通过一个案例演示在 Java 程序中声明包,以及不同包之间类的使用。1)创建一个名为 com.dao 的包。2)向 com.dao 包中添加一个 Student 类,该类...
  • Java自定义注解Annotation详解

    万次阅读 多人点赞 2017-12-17 17:57:17
    简介开发中经常使用到注解,在项目中也偶尔会见到过自定义注解,今天就来探讨一下这个注解是什么鬼,以及注解的作用和自定义注解。列举开发中常见的注解 @Override:当重写父类的方法时一般都会在方法上标注上此注解...
  • 比如空指针,SQL语法错误,数据库连不上,用户对这些异常是无能为力的,碰到这类异常系统统一处理-就告诉用户:系统出现异常了 1、Exception: 非运行时异常,在项目运行之前必须处理掉。一般由程序员try catch掉 ...
  • 本文主要介绍的是关于java自定义注解,下面话不多说了,来一起看看详细的介绍吧 随着springboot的流行,以前基于xml的spring配置用的越来越少,javaconfig形式使用的越来越多,类似于: @configuration public class...
  • 走进自定义统一异常 1.1 什么是自定义统一异常 我们在写代码的时候,对异常处理一般是try catch或者抛出异常throws Exception。 try catch大家都知道,代码中大量的try catch会占用内存影响性能,而且需要在每个...
  • java自定义注解

    千次阅读 2021-03-01 09:16:33
    该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的class文件和一个注解处理工具组成。Annotation并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反...
  • 自定义抽象语法树JSON模板
  • Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。本文将先从自定义注解的基础概念说起,然后开始实战,写小段代码实现自定义注解+拦截器,自定义...
  • java自定义注解及获取注解参数

    万次阅读 2019-02-09 21:20:05
    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。 元注解:  元注解的作用就是负责注解其他注解。Java5.0定义了4...
  • Java异常详解及自定义异常

    千次阅读 2020-12-05 22:30:28
    java中,阻止当前方法或作用域的情况,称之为异常。 异常的分类 Error:是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错误一般表示代码运行时JVM出现问题。通常有Virtual Machine...
  • java自定义注解实现请求参数校验创建自定义注解通过Java反射获取entity属性AOP切面用法示例 创建自定义注解 // 加在属性字段上 @Traget(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ...
  • 深入JAVA注解(Annotation):自定义注解

    万次阅读 多人点赞 2019-07-31 18:40:53
    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。 元注解:  元注解的作用就是负责注解其他注解。Java5.0定义了4...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 205,233
精华内容 82,093
关键字:

java 如何自定义语法

java 订阅