包+static成员+代码块+内部类
Posted ohana!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包+static成员+代码块+内部类相关的知识,希望对你有一定的参考价值。
一,包
1.为了更好的管理类,把多个类收集在一起成为一组,成为软件包
- 包是对类,接口等的封装机制的体现,是对类或者接口等一种比较好的管理
- 在同一个包中不允许存在相同名称的类,但在不同包中可以
2.导入包中的类
import java.util.Date;
public class TestDate1 {
public static void main(String[] args) {
//导入包中的类
//方法一(以导入一个时间戳为例子)
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
//方法二(用import语句导入包)
Date date1 = new Date();
System.out.println(date1.getTime());
Date date2 = new Date();
System.out.println(date2.getTime());
}
}
3.自定义包
- 在文件的最上方加上一个 package 语句指定该代码在哪个包中
- 包名需要尽量指定成唯一的名字
- 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码
- 如果一个类没有 package 语句, 则该类被放到一个默认包中
- 导入自定义包的操作可以用import语句来完成,和导入包一样
4.包的访问权限控制
二,static成员
以学生类为例
public class student {
public String name;
public String gender;
public int age;
public student(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public void print(){
System.out.println(name + "-" + gender +"-" + age);
}
public static void main(String[] args) {
student a = new student("张三","男",20);
student b = new student("李四","女",21);
student c = new student("王五","男",22);
a.print();
b.print();
c.print();
}
}
student类中定义的成员变量,每个对象都会包含一份(实例变量)
1.在Java中被static修饰的成员,称为静态成员变量,也称为类成员变量,它不属于任何对象私有是所有对象共享的
静态成员变量的特性:
- 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
- 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
- JDK7及以前,HotSpot(Java虚拟机)中存储在方法区,JDK8及之后,类变量存储在Java堆
- 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
- 可以直接通过类名访问,也可以通过对象访问
2.static修饰成员方法
- 不属于某个具体的对象,是类方法
- 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用
- 静态方法没有隐藏的this引用参数,因此不能在静态方法中访问任何非静态成员变量
- 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用
3.static成员变量初始化
- 就地初始化
就是在定义时直接给出初始值
- 静态代码块初始化
三,代码块
使用{}定义的一段代码称为代码块
- 普通代码块
定义在方法中的代码块
public static void main(String[] args) { student s1 = new student("张三","男",20); student s2 = new student("李四","女",21); student s3 = new student("王五","男",22); System.out.println(student.classroom); System.out.println(s1.classroom); System.out.println(s2.classroom); System.out.println(s3.classroom); }
定义在{}中的
- 构造代码块(实例代码块,构造代码块一般用于初始化示例成员变量)
public class student1 { public String name; public String gender; public int age; public static String classroom = "101"; public student1() { System.out.println("我是无参构造方法"); } //构造代码块(实例代码块) { this.name = "张三"; this.gender = "男"; this.age = 20; } public void print(){ System.out.println(name + "-" + gender +"-" + age); } public static void main(String[] args) { student1 s1 = new student1(); s1.print(); } }
注意:实例代码块会优于构造方法执行
- 静态代码块
使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量
静态代码块不管生成多少个对象,并且只会生成一次
1.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
2.如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依 次合并,最终放在生成的<>方法中,该方法在类加载时调用,并且只调用一次
3.实例代码块只有在创建对象时才会执行
- 同步代码块
四,内部类
outclass称为外部类,Innerclass称为内部类
被static修饰的称为静态内部类,未被修饰的称为普通内部类
以上是关于包+static成员+代码块+内部类的主要内容,如果未能解决你的问题,请参考以下文章
static关键字,代码块,abstract关键字,interface,内部类,异常处理