您的位置:首页 > 编程语言 > Java开发

java编程思想学习笔记

2014-03-09 17:30 274 查看
1.不要滥用this关键字,只在必要的时候使用它。

2.对象有多个构造器函数时,可以在一个构造器中使用this关键字调用其他的构造器。构造器函数调用要写在最起始的位置,也正是因此,在构造器函数中只能调用其他构造器函数一次(个)。

3.变量初始化

    类成员变量

    对象类型的成员变量如果没有手动初始化,其初始值为null。基本数据类型没有手动初始化的情况下,有其固定的默认初始化值。

    方法变量

    方法中定义的变量必须手动初始化,否则编译时报错。

4.初始化顺序

    静态块儿 > 类成员变量 > 非静态块儿 > 构造方法(静态块儿只在类首次被初始化的时候执行一次,其他项每次创建新的对象都会执行)

5.数组定义

    int[] a = new int[]{1, 2, 3,};

    int[] b = new int[]{1, 2, 3};

    以上两种数组的初始化都是合法的,也就是说可以在初始化数组的时候每个元素的末尾都紧跟一个英文逗号,也可以省略最后一个逗号。

6.可变参数列表

    可变参数列表的出现为我们提供了很大的方便,不过它的特性也会带来某些不好的地方。例如下面的情况:

    public void method(int...params);

    public void method(String...params);

    通常情况下调用上述重载方法都不会有问题,但是当调用的方法没有参数时将不能通过编译。所以应该只在重载方法的一个版本上使用可变参数列表,或者压根不用它。

7.接口的字段类型

    如果有的话,接口的字段类型默认是static和final的。

    接口中定义的方法默认都是public的。

8.JAVA注解

    首先看一个自定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
public int value();
public String description() default "no description";
}
    一个调用以上注解的例子:

public class MyClass{
@MyAnnotation(50)
public void save(){}
@MyAnnotation(value=20,description="删除")
public void delete(){}
}
    可以看出,自定义一个注解和定义一个借口十分相似。

    1.元注解@Target声明自定义注解的作用范围,它可以选择的ElementType枚举类型如下

CONSTRUCTOR
用于构造器声明

FILED 用于域声明

LOCAL_VARIABLE
用于局部变量声明

METHOD 用于方法声明

PACKAGE 用于包声明

PARAMETER 用于参数声明

TYPE 用于类、接口(包括注解类型)、枚举声明

    如果省略@Target声明,自定义注解将具有以上全部作用域,不过一般不会出现这种需要。

   2. 元注解@Retention声明在什么级别保存注解信息,可选的RetentionPolicy枚举类型如下:

SOURCE 注解将被编译期丢弃

CLASS 注解在class文件中可用,但是会被VM丢弃

RUNTIME 运行期也将保留注解,因此可用反射机制读取注解信息

   3. 注解元素(如上面例子中的value、description)可用的类型如下

所有基本类型(如int、float、boolean等)

String类型

Class类型

枚举类型(enum)

注解类型(Annotation)

以上类型的数组

    4.自定义注解的使用

    就像上面的例子所写的那样,使用注解的时候在它的作用域上用“@” + 注解名称调用(@MyAnnotation)。如果需要指定注解元素的值(value和&或description),需要在后面跟着的括号内用键值对的形式来完成(value=20,description="删除")。因为可以在定义注解的时候为注解元素指定默认值,所以赋值这一步不是必须的。有意思的一个特性是,如果有一个注解元素名为value,并且只需要为这个元素赋值,只需要在括号内直接给出value的值即可("@MyAnnotation(20)")。

    5.注解嵌套

    下面是一个数据库表约束的自定义注解

@Target(ElementType.FIELD)
@Retetion(RetetionPolicy.RUNTIME)
public @interface Constraints{
boolean primaryKey() default false;
boolean allowNull() default true;
boolean unique() default false;
}
    下面这个String字段到表中列的映射注解嵌套了上文的注解

@Target(ElementType.FIELD)
@Retetion(RetetionPolicy.RUNTIME)
public @interface SQLString{
int value() default 0;
String name default "";
Constraints constraints() default @Constraints(allowNull=false);
}
    可以看到,constraints元素的默认值与@Constraints定义时设置的默认值不同时,可以在元素定义时重新指定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息