java基础

java基础(代码块、内部类)
今天学习内容:
代码块
内部类

代码块
在java中使用"()"括起来的代码称为代码块。根据代码块的定义位置及声明的关键字不同,代码块可以分为以下四种:
普通代码块
构造块
静态块
同步代码块

普通代码块
直接在一个方法中出现的“{}”,就称为普通代码块:

package com.smw.codedemo;
public class CodeDemo01 {
	public static void main(String[] args) {
		{		//普通代码块
			int x = 10;
			System.out.println(x);
		}
		int x = 100;
		System.out.println(x);
	}
}

构造块
直接在类中定义的代码块称为构造块:

package com.smw.codedemo;
class Demo{
	public Demo(){	//构造方法
		System.out.println("***********构造方法***********");
	}
	{		//构造块
		System.out.println("***********构造块***********");
	}
}
public class CodeDemo02 {
	public static void main(String[] args) {
		new Demo();
		new Demo();
		new Demo();
	}
}

可以发现:(1)构造块会重复调用多次
(2)构造块会优先于构造方法执行
静态块
使用static关键字声明的代码块称为静态块。静态块的主要目的是用来为静态属性初始化

package com.smw.codedemo;
class Demo{
	{		//构造块
		System.out.println("***********构造块***********");
	}
	static{		
		System.out.println("***********类中的静态块***********");
	}
	public Demo(){	//构造方法
		System.out.println("***********构造方法***********");
	}
}
public class CodeDemo02 {
	static{
		System.out.println("***********主类中的静态块***********");
	}
	public static void main(String[] args) {
		new Demo();
		new Demo();
		new Demo();
	}
}

静态块优先于主方法执行,静态块优先于构造块执行,而且只执行一次。
思考:
要求输出“Hello world”,且不能使用主方法。

package com.smw.codedemo;
public class CodeDemo04 {
	static {
		System.out.println("Hello world");
		System.exit(1);
	}
}

在静态块中加入系统退出的操作,以保证程序不在搜索主方法,但是此程序只做娱乐使用,本身没有任何的意义。

内部类
内部类:在一个类的内部还有一个类
范例:观察内部类。

package com.smw.innerclassdemo;
class Outer{
	private String name = "Hello world";
	class Inner{
		public void print(){
			System.out.println(name);
		}
	}
	public void fun(){
		new Inner().print();
	}
}
public class InnerClassDemo01 {
	public static void main(String[] args) {
		new Outer().fun();
	}
}

以上代码可以发现内部类的缺点:程序的结构混乱
内部类的唯一优点:可以方便的方位外部类中的私有成员
一个内部类如果使用static关键字声明,那么此内部类就讲成为外部类。可以直接通过外部类.内部类的形式访问。
内部类可以在任意的地方使用,例如:在方法中声明。

package com.smw.innerclassdemo;
class Outer04{
	private String name = "Hello world";
	public void fun(){
		class Inner{
			public void print(){
				System.out.println(name);
			}
		}
		new Inner().print();
	}
}
public class InnerClassDemo04 {
	public static void main(String[] args) {
		new Outer04().fun();
	}
}

在方法中定义的内部类,可以直接访问外部类中的各个成员,但是如果要访问方法中的参数,则在参数上要使用final关键字声明。

package com.smw.innerclassdemo;
class Outer06{
	private String name = "Hello world";
	public void fun(final int temp){
		class Inner{
			public void print(){
				System.out.println(name);
				System.out.println(temp);
			}
		}
		new Inner().print();
	}
}
public class InnerClassDemo06 {
	public static void main(String[] args) {
		new Outer06().fun(30);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值