JAVA学习心得——详述静态内部类与非静态内部类

非静态内部类:1、非静态有名内部类。2、非静态匿名内部类。

静态内部类:1、静态有名内部类。2、静态匿名内部类。

非静态内部类:

 public class Body{
 	class Heart {    //非静态有名内部类,
 	 	void work() {
  		 System.out.println("bulabula ...");
		  }
 		}
 }
 
如何调用非静态有名内部类的方法?

非静态的方法都需要对象调用,内部类也不例外,但是每次内部类实例化对象时,都需要先实例化一个外部类对象。
实例化格式:
外部类类名 外部实例化对象名 = new 外部类类名();
内部类类名 内部实例化对象名 = 外部实例化对象名.new内部实例化对象名();
或者:
内部类类名 内部实例化对象名 = new 外部类类名().new内部实例化对象();
具体程序如下:

1、外部类非静态方法调用:
	public void getheart(){
		Heart heart = new Heart();(其实是与上述实例化对应,为this.new Heart();,默认有this,如果是静态中就没有this。包括静态方法和静态代码块。)
		heart.work();

	}
2、外部类静态方法调用:
	public void getheart2(){
		Heart heart2 = new Body().new Heart();
		heart2.work();
	}
	

静态方法调用内部类方法,必须先创建一个与外部类绑定的内部类对象,用这个对象去调用内部类方法。


静态内部类

	static class Stomach {//静态内部类。
 	void work() {
   		System.out.println("bulabula ...");
  }

静态方法的调用只能用外部类名或者外部实例化对象来调用。

1、外部类非静态方法调用:
	public void getstomach(){
		new Stomach().work;//直接使用内部类名去调用
	}
2、外部类静态方法调用:
	static void getstomach2() {
   		 new Stomach().work();//同样也可以通过内部类名直接调用。
  }

注意:如果外部类方法和内部类不在一个外部类下,那么在外部类方法调用静态内部类时需要指定说明是哪一个外部类。
方法如下:
外部类 外部类实例化对象 = new 外部类();
外部类实例化对象.外部类方法();

为什么静态方法可以这么调用?
静态的在类加载的时候处理:静态变量直接赋值 静态方法直接分配地址 静态代码块直接执行;——JVM对静态的操作比非晶态的靠前。所以在运行的时候,内存已经存在了一个外部类对象,所以不需要再实例化一个外部对象。

注意:

1、静态匿名内部类的命名方法:就是在匿名内部类前加上static即可!

	static Body body1 =new Body() {
   			@Override
   			public void move() {
   				 System.out.println("跳动......");
  			 }
 		 };

2、只有有名静态内部类才允许有静态属性、静态方法、静态代码块。


lambda

其表达式始于Java 8,它的出现简化了函数式接口匿名内部类的语法,其表达式语法如下:([参数1], [参数2], [参数3],… [参数n])->{代码块}
示例如下:

在这里插入图片描述
在这里插入图片描述
通过函数式接口计算a+b,方法非常的冗长。
但是通过Lambda表达式就非常简单。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值