一. 对象块
代码如下:
1 public class TestObject { 2 int i; 3 int j; 4 { 5 System.out.println("对象块执行...."); 6 this.i = 1; 7 this.j = 99; 8 } 9 10 public TestObject(){ 11 System.out.println("构造函数执行....."); 12 System.out.println("i = " +i); 13 System.out.println("j = " +j); 14 } 15 16 public static void main(String[] args){ 17 TestObject test = new TestObject(); 18 19 } 20 }
执行结果:
对象块执行.... 构造函数执行..... i = 1 j = 99
如以上代码, 在4~8行中, 为对象块.
从执行结果可以看出, 对象块优于构造函数执行, 用于对成员变量进行初始化操作, 而且, 通过this可以看出, 在对象被创建的时候, 对象块就执行, 可见, 对象块是属于对象的.
二. 静态块
代码如下:
1 public class TestObject { 2 static{ 3 System.out.println("静态块被加载..."); 4 } 5 6 public static void main(String[] args){ 7 8 } 9 }
运行结果:
静态块被加载...
为什么main函数为空, 也能显示出这个结果呢? 因为main函数是一个主入口, 而这个入口执行前, 要先加载类, 而静态块是属于类的, 所以在类被加载的时候, 静态块就被执行.
静态块一般只执行一次.
好处用法: 对于一些常用的初始化的东西, 在程序开始时就进行初始化操作.(利用了只执行一次, 并且优于main函数的特点)
三. 包 package
每个类都要放在包里, 规范起来。包的命名推荐使用公司名称。比如google.com 可以这样命名包 com.google.项目名称.模块名称
包是严格的按照系统分类的来的,这点很重要, 也就是说,包是一个文件夹,一级一级这样下去,最后子文件是类文件.
包的导入, 用import 包名;
注意:在包与包内的类之间进行相互调用的时候,就要用到import导入, 继承一个其他包的类, 也要这么做.
一个猫类 继承了动物类. 注意在类前面有import把动物类的包给导入. 如下:
package com.abc.one; import com.abc.two.Animal; public class Cat extends Animal { static{ System.out.println("A cat"); } public static void main(String[] args){ Cat cat = new Cat(); cat.mathod(); } }
动物类:
package com.abc.two; public class Animal { public static void main(String[] args){ System.out.println("动物类"); } public void mathod(){ System.out.println("动物方法"); } }
运行 Cat.java文件的结果为:
A cat 动物方法
包的创建:
两个不同包之间的调用, 用import包导入来实现.
四. 访问控制
package com.abc.one; public class Test { private int i; int j; protected int n; public int m; }
package com.abc.two; import com.abc.one.Test; public class TestSmall { public static void main(){ Test test = new Test(); System.out.println(test.i); } }
无法运行, 因为 i 私有类型.
时间: 2024-12-16 01:09:10