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);
}
}