Java中内部类、以及static和final关键字的使用

目录

Java 内部类

 final关键字

static关键字

Java 内部类


Java 一个类中可以嵌套另外一个类,语法格式如下:

class Outer {   // 外部类
    // ...
    class Inner { // 内部类
        // ...
    }
}

要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。

内部类类型:

  • 非静态内部类
  • 私有的内部类
  • 静态内部类

非静态内部类
非静态内部类是一个类中嵌套着另外一个类。 它有访问外部类成员的权限, 通常被称为内部类。由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现。

package com.lele.day7_23;

public class out {
	protected static int num = 99;
	
	class in01{
		int num = 11;
		
		public void print01() {
			int num = 22;
			System.out.println(num);
			System.out.println(this.num);
			System.out.println(out.this.num);
		}
	}
}


package com.lele.day7_23;

import com.lele.day7_23.out.in01;

public class OutInTest {

	public static void main(String[] args) {
		// 创建普通内部类对象
		in01 in1 = new out().new in01();
		in1.print01();
		
		System.out.println(in1.num);
	}

}

私有的内部类
内部类可以使用 private 或 protected 来修饰,如果你不希望内部类被外部类访问可以使用 private 修饰符:

package com.lele.day7_23;

public class out {
	protected static int num = 99;
	
    //私有内部类
	private class in03{
		public void print03() {
			System.out.println("print03......");
		}
	}
	
	public static void main(String[] args) {
		out out1 = new out();
		out.in03 in3 = out1.new in03();
		in3.print03();
	}

}

静态内部类
静态内部类可以使用 static 关键字定义,静态内部类我们不需要创建外部类来访问,可以直接访问它:

package com.lele.day7_23;

public class out {
	protected static int num = 99;
	
	//静态内部类
	static class in02{
		public void print02() {
			System.out.println(num);
		}
	}

}

package com.lele.day7_23;

import com.lele.day7_23.out.in02;

public class OutInTest {

	public static void main(String[] args) {

		// 创建静态内部类对象
		in02 in2 = new out.in02();
		
		in2.print02();
		
	}

}

 final关键字

① 修饰一个类 当前类不能被继承(太监类)

② 修饰一个方法 不能覆盖重写

③ 修饰一个局部变量 局部变量就不能更改,“一次赋值,终生不变”

④ 修饰一个成员变量

面试题:为什么String使用final关键字修饰?

String类的不可变性带来的好处总结主要有两点:

因为String类的不可变性,才能使得JVM可以实现字符串常量池;字符串常量池可以在程序运行时节约很多内存空间,因为不同的字符串变量指向相同的字面量时,都是指向字符串常量池中的同一个对象。这样一方面能够节约内存,另一方面也提升了性能。
因为String类的不可变性,从而保证了字符串对象在多线程环境下是线程安全的。如果String类是可变的,那么会引起很严重的安全问题。我们在很多情况下都是直接通过字符串传递数据,比如数据库的用户名密码、网络编程中的ip和端口,因为字符串是不可变的,所以它的值不能被修改,如果字符串是可变的,那么可以通过改变引用地址指向的值去修改字符串的值,从而导致安全漏洞

static关键字

1、修饰成员变量

2、修饰成员方法

3、静态代码块

4、修饰类【只能修饰内部类也就是静态内部类】

5、静态导包

package com.lele.day7_23;

public class staticTest {
	//修饰成员变量
	private static int id;
	//修饰成员方法
	public static void print() {
		System.out.println("Hello Word !");
	}
	static {
		System.out.println("static Hello Word !");
	}
	//修饰内部类
	static class A{
	
	}
}

静态导包 静态导包格式:import static

这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法

静态内部类 静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。没有这个引用就意味着:

1、它的创建是不需要依赖外围类的创建。 2、它不能使用任何外围类的非static成员变量和方法。

static静态代码块

static静态方法 static修饰的方法也叫做静态方法

注意:构造方法不是静态方法!

静态变量和实例变量的概念

静态变量: static修饰的成员变量叫做静态变量【 类变量】,静态变量是属于这个类,而不是属于是对象。

实例变量: 没有被static修饰的成员变量叫做实例变量,实例变量是属于这个类的实例对象。

还有一点需要注意的是:static是不允许用来修饰局部变量,不要问我问什么,因为java规定的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值