java 类的构成5部分:block、constructor、field、method、inner class

对类的基本认识

1.在一个源文件有且仅有一个public 类(公开类),这个公开类的类名要与源文件名一致。
2.每个类都可以有主函数,主函数是程序的入口,当有多个主函数时运行时可指定入口。

java 类中的成员(类的构成)

class 类{
block 代码块:(静态代码块:类加载时执行,代码块:创建对象时先于构造器执行)
constructor 构造器:(创建对象时执行)
Field 属性 (静态成员变量:类加载时初始化,成员变量:实例化时初始化)
method 方法: (静态方法:类加载时初始化,成员方法:实例化时初始化)
Inner class 内部类:(同属性)
}

1、构造器 constructer

1、构造器的作用:创建对象、初始化成员变量
1、构造器的表现形式:方法名与类名相同并且没有返回值、类中默认是无参构造器,构造器也可重载。

2、属性(成员变量与局部变量)Field

1、成员变量与局部变量的位置不同
成员变量:在类中定义。
局部变量:声明在方法内、方法的形参,代码块内,构造器形参,构造器内。
2、在使用修饰符上
成员变量:声明时可使用权限修饰符,常用的权限修饰符有 private ,public,缺省,protected 。
局部变量:不可以使用修饰符和static,但final 可用。
3、初始化
属性: 类的成员变量根据类型不同,都有默认的初始值。整型 0、浮点型 0.0、字符型 0、布尔型 false、引用数据类型: (类,数组,接口)null。
局部变量: 没有默认初始值。

匿名对象:创建对象时没有变量名只能使用一次
system.out.println(new person())

3、方法 method

方法的重载 overload、可变形参的方法、方法参数的值传递机制、递归方法

1、重载的概念overload(与重写override不同)

在一个类中,存在同名方法并且它们的参数个数或者参数类型不同,与返回值无关。
int add(int x,int y){return x+y}
int add(int x,int y,int z){return x+y+z}
double add(double x,double y){return x+y}

2、可变形参的方法

介绍:JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参,从而,可以用一种更简单的方法,来传递个数可变的参数。
//JDK 5.0 以前:采用数组形参来定义方法,传入多个同一类型变量。
public void test(int a,String[] books);
//JDK 5.0 采用可变个数形参来定义方法,传入多个同一类型变量。
public void test(int a,String… books);
可变参数方法与重载的使用:
public void show(int i){
}
public void show(String s){
System.out.println(“one arg”);
}
public void show(String … strs){//0-n个参数 ,不能和数组String[] 同时重载, 多个参数时可变形参要放末尾,使用场景sql查询。
System.out.println(“var arg”);
}
调用:
1.show()//var arg
2.show(“one”)//one arg
3.show (“one”,“two”)//var arg

3、方法参数的值传递机制

形参:方法声明时的参数
实参:方法调用时实际传给形参的数值

实参是基本数据类型:将值传给形参,形参变不影响实参。
String 类型(引用类型):将值传给形参,形参变不影响实参。
实参是引用数据类型:将地址值传给形参,形参便影响实参。

4、递归 recursion [rɪˈkɜːrʒn]:一个方法体内调用自己

public int getSum1(int n){
if(n==1){
return 1;
}else{
return n+getSum(n-1)
}
}

4、代码块 block

作用:用来初始化类和对象,有静态代码块和非静态代码块。一个类中可以定义多个。
1、代码块:随着对象的创建而加载,所以创建一次对象执行一次。
{
}

2、静态代码块:随着类的加载而执行只执行一次,方法是调用才执行。
static{
}

5、内部类

理解:一个类中又包含一个类
内部类可以出现的地方:成员内部类(静态、非静态)、局部内部类(方法内,代码块内、构造器内)
成员内部类的使用:类内可定义构造器 属性… 。可以用final ,abstract 修饰,

class Person{
//成员变量
static class BB{}
class CC{}
public void method(){
//局部内部类
class AA{}
}
}

2、单例设计模式

保证系统中某个类只有一个对象
class Me{
static Me me=null;
private Me(){
}
public static Me getInstance(){
if(me!=null){
me= new Me();
}
return me;
}
}

4、抽象类 abstract

abstract 修饰类和方法。
抽象类不能实例化,但抽象类中有构造器。
提供抽象类的子类,子类会用到抽象类的构造器。
abstract 修饰方法,方法中没有结构体。
抽象类中可以没有抽象方法,有抽象方法一定是抽象类;
子类一定要重写所有的抽象方法否则定义为抽象类。
abstract 不能修饰私有,静态方法,final方法构造器,为啥:因为不能重写。
静态方法不能重写为啥:实例方法可重写,静态方法属于类。

5、接口 interface

在JDK7以前只能定义全局常量和抽象方法 接口中不能定义构造器也没有默认构造方法 所以接口不能实例化。但是抽象类有构造器的。
全局常量:public static final 可略
抽象方法:public abstract 可略
定义接口
interface Flyabe{
int a=1;
void fly();
}
实现接口
class A implements Flyabe{
//重写接口中的所有类(都是抽象的)
}
JDK8还可以写静态方法和默认方法。
static void method(){}//可直接调用
default void method(){}//子类的实例可以直接拿到默认方法,也可重写。
接口的使用:
1、代理模式Proxy
代理设计就是为其他对象提供一种代理以控制对这个对象的访问。
2、工厂模式

枚举类

1.枚举类的理解:类的对象为有限个并且是确定的称为枚举类。
2.当需要定义一组常量时,强烈建议使用枚举类。
3.如果枚举类只有一个对象,则可以作为单例模式的实现方式。
定义枚举类的方式:
方式一:jdk5.0之前,自定义枚举类。
方式二:jdk5.0之后,可以使用enum关键字定义枚举类。
方式一:


public class EnumTest {

    public static void main(String[] args){
        System.out.println(Season.SPRING);//简单实现
    }

}
class Season{
    private final String seasonName;
    private final String seasonDesc;
    private Season(String seasonName ,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    public static final Season SPRING = new Season("spring","1");
    public static final Season SUMMER = new Season("summer","2");
    public static final Season AUTUMN = new Season("autumn","3");
    public static final Season WINTER = new Season("winter","4");
}

方式二:

public class EnumTest01 {

    public static void main(String[] args){

        System.out.println(Season1.SPRING1);//SPRING1
    }
}

enum Season1{

    SPRING1("spring","1"),
    SUMMER1("summer","2"),
    AUTUMN1("autumn","3"),
    WINTER1("winter","4");
    private final String seasonName;
    private final String seasonDesc;
    private Season1(String seasonName ,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
}

注解Annotation概述

1.从JDK5.0开始,java增加了对元数据(metadate)的支持,也就是Annotation(注解)。
2.Annotation其实是代码的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotaion,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
3.Annotation 可以像修饰符一样被使用,可用于修饰包,类、构造器、方法、成员变量、参数、局部变量的声明。这些信息保存在Annotation的name=value对中。
4、使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。
5.生成文档相关的注解
@author标明开发该类模块的作者,多个作者之间使用,分割
@version标明该类模块的版本。
@see参考方向,也就是相关主题。
@since从哪个版本开始增加。
@param 对方法中某个参数的说明,如果没有参数就不能写。
@return 对方法返回值的说明,如果方法的返回值类型是void就不能写。
@exception对方法可能抛出的异常进行说明,如果方法没有用throws显示抛出的异常就不能写其中。
@param @return @exception 这三个标记都是只用于方法的。
@param的格式要求:@param形参名 形参类型 形参说明
@return 的格式要求:@return 返回值类型 返回值说明
@exception的格式要求:@exception 异常类型异常说明。
@param和@exception 可以并列多个,
6、在编译时进行格式检查JDK内置的三个基本注解
@Override:限定父类方法,该注解只能用于方法//重写方法
@Deprecated:用于表示所修饰的元素(类、方法)已过时。通常是因为所修饰的结构危险或存在更好的选择。
@SuppressWarnings:抑制编辑器警告。

框架=注解+反射+设计模式;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值