美文网首页Java
Java 语法的认知

Java 语法的认知

作者: 易X | 来源:发表于2020-12-22 17:43 被阅读0次

目录:

1.1.1. 字符型常量和字符串常量的区别?

1.1.2. 关于注释?

1.1.3. 标识符和关键字的区别是什么?

1.1.4. 自增自减运算符

1.1.5. continue、break、和return的区别是什么?

1.1.6. Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?

内容:

1.1.1. 字符型常量和字符串常量的区别?

(1) 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符

(2) 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)

(3) 占内存大小 字符常量只占 2 个字节; 字符串常量占若干个字节 (注意: char 在 Java 中占两个字节)

1.1.2. 关于注释?

Java 中的注释有三种:

1. 单行注释

2. 多行注释

3. 文档注释。

在我们编写代码的时候,如果代码量比较少,我们自己或者团队其他成员还可以很轻易地看懂代码,但是当项目结构一旦复杂起来,我们就需要用到注释了。注释并不会执行,是我们程序员写给自己看的,注释是你的代码说明书,能够帮助看代码的人快速地理清代码之间的逻辑关系。因此,在写程序的时候随手加上注释是一个非常好的习惯。

《Clean Code》这本书明确指出:

代码的注释不是越详细越好。实际上好的代码本身就是注释,我们要尽量规范和美化自己的代码来减少不必要的注释。

若编程语言足够有表达力,就不需要注释,尽量通过代码来阐述。

举个例子:

去掉下面复杂的注释,只需要创建一个与注释所言同一事物的函数即可

// check to see if the employee is eligible for full benefits

if ((employee.falgs & HOURLY_FLAG) && (employee.age > 65))

应替换为

if (employee.isEligibleForFullBenefits())

1.1.3. 标识符和关键字的区别是什么?

在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了标识符,简单来说,标识符就是一个名字。但是有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这种特殊的标识符就是关键字。因此,关键字是被赋予特殊含义的标识符。比如,在我们的日常生活中 ,“警察局”这个名字已经被赋予了特殊的含义,所以如果你开一家店,店的名字不能叫“警察局”,“警察局”就是我们日常生活中的关键字。

1.1.4. 自增自减运算符

在写代码的过程中,常见的一种情况是需要某个整数类型变量增加 1 或减少 1,Java 提供了一种特殊的运算符,用于这种表达式,叫做自增运算符(++)和自减运算符(--)。

++和--运算符可以放在操作数之前,也可以放在操作数之后,当运算符放在操作数之前时,先自增/减,再赋值;当运算符放在操作数之后时,先赋值,再自增/减。例如,当“b=++a”时,先自增(自己增加1),再赋值(赋值给 b);当“b=a++”时,先赋值(赋值给 b),再自增(自己增加 1)。也就是,++a 输出的是 a+1 的值,a++输出的是 a 值。用一句口诀就是:“符号在前就先加/减,符号在后就后加/减”。

1.1.5. continue、break、和return的区别是什么?

在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:

(1). continue :指跳出当前的这一次循环,继续下一次循环。

(2). break :指跳出整个循环体,继续执行循环下面的语句。

return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:

(1).  return; :直接使用 return 结束方法执行,用于没有返回值函数的方法

(2).  return value; :return 一个特定值,用于有返回值函数的方法

1.1.6. Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,这也就是通常所说类型擦除 。

List<Integer> list = new ArrayList<>();

list.add(12);

//这里直接添加会报错

list.add("a");

Class<? extends List> clazz = list.getClass();

Method add = clazz.getDeclaredMethod("add", Object.class);

//但是通过反射添加,是可以的

add.invoke(list, "kl");

System.out.println(list)

泛型一般有三种使用方式:泛型类、泛型接口、泛型方法。

(1).泛型类:

//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型

//在实例化泛型类时,必须指定T的具体类型

public class Generic<T>{

  private T key;

  public Generic(T key) {

    this.key = key;

}

  public T getKey(){

    return key;

}

}

如何实例化泛型类:

Generic<Integer> genericInteger = new Generic<Integer>(123456);

2.泛型接口 :

public interface Generator<T> {

  public T method();

}

实现泛型接口,不指定类型:

class GeneratorImpl<T> implements Generator<T>{

  @Override

  public T method() {

    return null;

}

}

实现泛型接口,指定类型:

class GeneratorImpl<T> implements Generator<String>{

  @Override

  public String method() {

    return "hello";

}

}

3.泛型方法 :

public static < E > void printArray( E[] inputArray )

{   

    for ( E element : inputArray ){   

      System.out.printf( "%s ", element );

    }

    System.out.println();

}

使用:

// 创建不同类型数组: Integer, Double 和 Character

Integer[] intArray = { 1, 2, 3 };

String[] stringArray = { "Hello", "World" };

printArray( intArray );

printArray( stringArray );

常用的通配符为: T,E,K,V,?

(1)? 表示不确定的 java 类型

(2)T (type) 表示具体的一个java类型

(3)K V (key value) 分别代表java键值中的Key Value

(4)E (element) 代表Element

相关文章

网友评论

    本文标题:Java 语法的认知

    本文链接:https://www.haomeiwen.com/subject/ehisnktx.html