java编程思想学习笔记

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定义时设置的默认值不同时,可以在元素定义时重新指定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值