Java基础_类中可包含内容【成员变量、成员方法、代码块、内部类】

1、属性(常量、变量)

a、常量

常量指的是一个固定的值。

Java中利用final关键来表示“不能修改”的含义,即常量只要被初始化之后就不能再进行二次赋值,无法更改值。

而常量又分为字面常量(1、‘a’、true、“Hello”)和符号常量【使用final修饰的】。例如:

public static final PI = 3.14;

b、变量

变量本质上就是一个“可进行一些操作的存储空间”。

在被创建后且生命周期为结束之前,这个空间位置及其大小是固定的,而且放置的内容是不确定的。可以通过变量名来访问这个空间,进行合法的操作。

i. 定义格式

[修饰符] 数据类型 变量名 [= 初始值] [,变量名  [=初始值],]; 

ii. 分类

按照变量的作用域

  • 局部变量【方法内、代码块内】:没有默认值,所以必须初始化;在栈内存保存,随着方法调用创建和销毁。

  • 成员变量【类中,方法外】:有默认值;在堆内存中保存,随着 对象/类 的 创建/加载 进行创建和销毁。

类型说明
实例变量类的实例变量持有,每个对象都包含自己的实例变量。所以,需要在创建对象之后,通过方法名.属性方式调用。
类变量类本身持有,类的所有对象共享这个变量。在类的字节码文件加载到内存后随即创建。可以通过类名.属性对象名.属性进行调用

2、方法

方法是完成一段特定功能的代码片段。

a. 定义、使用

格式

[修饰符1 修饰符2] 返回值类型 方法名(形参列表){
	语句;
	……
}

调用对象名.方法名(实参列表)或者类名.方法名(实参列表)

分析
i. 参数列表(输入):
 - 形式参数:在方法定义中,接收传入数据。
 - 实际参数:在方法调用时,实际传入方法的数据。

ii. 返回值(输出):
 - 返回值类型:事先约定的返回值类型。
 - 返回值:方法执行完,返回给调用者的数据。

iii. Java使用值传递:因此,在一些操作中会出现意料之外的问题,如:交换两个数据。【原因:变量的生命周期。不同的方法会维护不同的栈帧。基本数据类型变量会保存在方法的栈帧中,随着方法的结束“销毁”。

b. 分类

类型说明
非静态方法只有创建了类的实例之后才能调用,使用对象名.方法名的方式调用
静态方法不能访问所有非静态的内容(属性、方法)。因为所有非静态内容需要通过对象才能够获取到,同样地也就不能使用this关键字类名.方法名对象名.方法名方式调用

c. 重载、重写

形式备注
重载方法名相同,参数列表不同同一个类中
重写方法名相同,参数列表完全一致父类、子类之间。通过添加注解@Override可以再编译期检查错误

此处,参数列表的形式包括参数的个数、类型、顺序等方面的内容。

d、特殊方法

i. 构造方法

构造器没有返回值类型,不能有return语句,而且名字必须和类完全一致。

作用:给成员非静态属性进行赋值操作。

  • 空参构造器【没有任何参数】:
    如果没有其他构造器,可以不显示的写一个空参构造器,编译器会默认分配一个空参构造器;一旦有其他构造器存在,就不会再分配空参构造器,此时就需要显示的写一个空参构造器,以防万一。
    一般不会在其中进行赋值操作,只是为了保证代码的健壮性而已。

  • 重载的构造器【含有参数】:
    在重载的构造器中,一般构造器参数会和类的属性名一致,此时通过使用this关键字()来区别形参和类属性名。

ii. 抽象类、接口中包含的特殊方法

抽象方法【需要通过继承或者实现方式获取到方法,转化为非抽象方法】

使用abstract关键字定义,不能被privatestaticfinal修饰。

格式:

[权限修饰符] abatract 返回值类型 方法名(形参列表);

【备注】:有抽象方法的类,一定是抽象类;抽象类,不一定含有抽象方法。

public abstract class AbstractClass {
    public AbstractClass() {
        System.out.println("抽象类:不含有抽象方法");
    }

    public static void main(String[] args) {
    	// {}表示需要重写其中的抽象方法,即使没有抽象方法也需要带着{}。【语法类似于匿名内部类的形式】
        AbstractClass ac=new AbstractClass() {};
        
    }
}
普通方法、私有方法、静态方法
  • JDK 8 :default、static方法
  • JDK 9:private方法

3、代码块

a、普通代码块

限制局部变量的作用范围/生命周期【方法内】

public static void main(String[] args) {
        int a=1;
        {
            a=2;
            int b=1;
            System.out.println("a="+a+",b="+b);// a=2,b=1
        }
//        System.out.println("a="+a+",b="+b);// java: 找不到符号   符号:变量 b
        System.out.println("a=" + a);// a=2
    }

b、静态代码块

类加载到内存中时执行,只执行一次。可以用于执行一些全局性的初始化操作。可在其中调用类的静态(即用static修饰)的内容。【类中,方法外;使用static关键字修饰】

static {
        System.out.println("静态块");

        //静态块只能调用静态属性,静态方法
        System.out.println(staticAttribute);
        staticMethod();
}

c、构造代码块

在创建对象时,会被触发,先于构造器执行。【类中,方法外】

{
        System.out.println(("构造块"));
}

d、同步代码块

同步代码块

4、内部类

内部类就是一个类内部的类。可以对应一组相对的概念:内部类、外部类。

a. 成员内部类【某一个类中,代码块之外】

成员内部类:包含属性、方法、构造器等内容,相应的修饰符和其他一般的类完全一致。

内部类可以访问外部类的内容;外部类想要访问内部类的东西,需要创建内部类的对象,再调用。

内部类、外部类存在属性重名情况:在内部类方法中,直接属性名访问的是局部变量;使用this.属性名访问的是内部类的属性;使用外部类名.this.属性名访问的是外部类的属性。

类型说明
静态使用static修饰。所以只能方位外部类中被static修饰的内容。
非静态不适用static修饰

b. 局部内部类

局部内部类是在方法内、代码块内、构造器内定义。

特点:访问到的属性是用final修饰的;

使用场景:当某一个类在整个项目中只使用一次,没有必要单独创建该类。

特殊情形:当创建一个对象时,无需知道对象的名字,只是单纯地为了获取对象。此时就是在使用匿名内部类的方式创建对象,可以通过这种方式来获取定制化对象

JDK 8中引入了一系列的语法来简化代码:函数式接口、lambda表达式、方法引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值