Java之内部类、包及代码块

个人通俗理解:

  1、内部类:有点类似于写在父类中的子类,根据位置不一样为不同的名字,和相应的访问方式不同;不过要访问外部类的话,需要充分运用好this(本类)的这个关键字;要是需要快速的创建子类对象的话,可以用到匿名内部类。

  2、包:其实就是个放类的文件夹,当需要用的别的包里的类的时候,则需要导包。不过存在四种不同的修饰符,则对应四种访问权限(default只是理论上的,实际上是不需要写的,直接默认了)

  3、代码块:按优先级的话,静态代码块的肯定在第一次使用的时候就执行这唯一的一次了,一般都是用在初始化的时候。定义在类中成员位置的构造代码块也是在创建对象的时候优于构造方法执行一次。而局部代码块则是定义在方法中的,它不能被外界访问的,但可以在其内部访问外界的。(存在即是合理的,先理解下)

一、内部类:

1、概念:

  卸载其他类的内部的类就叫内部类,其他的类被称为外部类。在内部类中可以直接访问外部类的所有成员。

2、分类:

  成员内部类、局部内部类。

3、成员内部类:  

  成员内部类,定义在外部类中的成员位置。

class 外部类 {
    修饰符 class 内部类 {
        //其他代码
}
}

访问方式:

外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

4、局部内部类:

局部内部类,定义在外部类方法中的局部位置。

class 外部类 {
    修饰符 返回值类型 方法名(参数) {
               class 内部类 {
//其他代码
              }
         }
}
                

访问方式:

在外部类方法中,创建内部类对象,进行访问

class Party {//外部类,聚会
    public void puffBall(){// 吹气球方法
        class Ball {// 内部类,气球
                  public void puff(){
                      System.out.println("气球膨胀了");
                  }
        }
//创建内部类对象,调用puff方法
        new Ball().puff();
    }
}
public static void main(String[] args) {
    //创建外部类对象
    Party p = new Party();
    //调用外部类中的puffBall方法
    p.puffBall();
}

5、匿名内部类: 

定义的匿名内部类有两个含义:

      ①、 临时定义某一指定类型的子类;

    ②、 定义后即刻创建刚刚定义的这个子类的对象;

作用:

  匿名内部类是创建某个类型子类对象的快捷方式。

new 父类或接口(){
    //进行方法重写
};

二、包:

1、概念:

java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。

2、声明:

package 包名.包名.包名…;

3、访问:

包名.包名….类名

带有包的类,创建对象格式:

包名.类名 变量名 = new包名.类名();

4、导包:

import 包名.类名;

5、访问修饰符:

  public protected Default private
同一类中
同一包中(子类与无关类)  
不同包的子类    
不同包中的无关类      

①、  要想仅能在本类中访问使用private修饰;

②、要想本包中的类都可以访问不加修饰符即可;

③、要想本包中的类与其他包中的子类可以访问使用protected修饰

④、 要想所有包中的所有类都可以访问使用public修饰。

⑤、注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

三、代码块:

1、局部代码块:

    局部代码块是定义在方法或语句中

  特点:

①、  以”{}”划定的代码区域,此时只需要关注作用域的不同即可(局部代码块内东西不能被外面访问,但是它可以访问外面的东西)

②、方法和类都是以代码块的方式划定边界的。

2、构造代码块:

  构造代码块是定义在类中成员位置的代码块

特点:

①、优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作;

②、每创建一个对象均会执行一次构造代码块。

3、静态代码块:

    静态代码块是定义在成员位置,使用static修饰的代码块。

static{ 

 };

特点:

①、它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

②、 该类不管创建多少对象,静态代码块只执行一次。

③、可用于给静态变量赋值,用来给类进行初始化。

原文地址:https://www.cnblogs.com/21-forever/p/10904351.html

时间: 2024-10-04 03:10:46

Java之内部类、包及代码块的相关文章

java之内部类

1 public class RedCowForm { 2 static String formName ; 3 RedCow cow ; //内部类声明对象 4 RedCowForm(){} 5 RedCowForm(String s) 6 { 7 cow =new RedCow(150,112,5000); 8 formName= s; 9 } 10 public void showCowMess() 11 { 12 cow.speak(); 13 } 14 class RedCow //内

java中成员变量、代码块、构造函数执行顺序

1.java虚拟机运行程序,首先需要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量 再load子类.初始化子类静态代码块和成员变量 2.load完毕父类与子类后,从main函数入口执行程序,先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时,先初始化非静态成员变量和非静态代码块,接着执行父类构造方法 再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着执行子类构造方法. package it.xiangnan.test; public

Java和Android中,代码块、static静态代码块的执行顺序

Java和Android中,代码块.static静态代码块的执行顺序有没有什么区别呢. Java 先来个简单的例子 Main.java: public class Main { static int a = 1; static { System.out.println(a); } static { a = 2; } public static void main(String[] args) { System.out.println("Hello World!"); System.ou

修饰符-包-内部类-代码块执行顺序

1.访问权限修饰符     从大到小的顺序为:public--protected--default--private     private--只能在同一类中使用;     default--不用写出来,默认不加.可以被同一包中的类使用     protected--可以被不同包的子类使用     public--可以被不同包的其它类使用 2.各种修饰符的修饰对象(可修饰哪些:类/接口/方法/属性)(多个修饰符连用是可以没有顺序的!)     1)访问权限修饰符:public/default--

java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定义了一个类(下文可以看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,他的用处可能对于初学者来说并不是那么显著,但是随着对他的深入了解,你会发现java的设计者在内裤类上面的确是用心良苦.学会使用内部类,是掌握java高级编程的一部分,他可以让你更优雅的设计你的程

java 类、方法、代码块修饰式关键字总结

super 关键字 this和super的区别 访问成员的区别 this关键字 this特点 this使用场景 static关键字 例子 访问权限修饰符 特点 总结: 四个修饰符的特点 访问权限修饰符的宽严关系 final关键字 用法 自定义常量 final修饰类 final修饰成员变量 final修饰局部变量 final修饰成员方法 super 关键字 this和super的区别 this代表当前对象,super可以理解为父类对象 既然super理解为一个父类对象,那么super应该可以用访问

java中成员变量、代码块、构造函数运行顺序

1.java虚拟机执行程序,首先须要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量 再load子类. 初始化子类静态代码块和成员变量 2.load完成父类与子类后,从main函数入口运行程序.先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时.先初始化非静态成员变量和非静态代码块,接着运行父类构造方法 再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着运行子类构造方法. package it.xiangnan.test; publi

Java线程安全与同步代码块

因为在电商网站工作的原因,对于秒杀.闪购等促销形式相当熟悉.无外乎商家拿出一定量的库存去做所谓的"亏本买卖",其目的是用有限的库存去吸引无限的流量.然而,我却碰到过因为系统问题,导致秒杀品超卖的情况.可怜的商户其实只提供了10双9.9元的童鞋做秒杀,却在瞬间内卖出了1000双! 类似这样的问题,在非线程安全的程序设计中十分常见,我们下面运行一个秒杀的程序: public class SalesThread implements Runnable { private int stock

深入java虚拟机之类的静态代码块执行时机

public class Test {   public static void main(String[] args) throws ClassNotFoundException {     // System.out.println(Class.forName("java.lang.String").getClassLoader());     // System.out.println(Class.forName("java.lang.Object").get