已解决
Java类包+final声明
来自网友在路上 162862提问 提问时间:2023-10-27 09:31:51阅读次数: 62
最佳答案 问答题库628位专家为你答疑解惑
1.包的特性:
1. Java类包简称包,同一个包中的类互相访问时,可以不指定包名。
2. Java包命名规则是全部使用小写。
3.在类中指定包名时,需要将package表达式放置在程序的第一行。
4. javac -d ./bin/ ./com/lzw/*.java:
通过 -d 参数,用于指定编译后类文件产生的位置,这样编译成功后 将在当前运行路径下的bin目录中产生com/lzw路径,并在该路径下出现相应源文件的类文件。
2.import导入静态成员
import除了导入包之外,还可以导入静态成员。
import static 静态成员
package com.lzw;import static java.lang.Math.max;
import static java.lang.System.out;public class importTest {public static void main(String[] args) {out.println("1和4的最大值是:" + max(1, 4)); //1和4的最大值是:4}
}
3.final关键字使用
final关键字可以用于声明变量,方法,类。
3.1 final变量(即常量)
3.3.1 被final声明的变量,不可以再改变值;
3.3.2 在声明的同时,不许对其进行赋值操作;
3.3.3 final还可以修饰对象引用;
数组也可以被看做为一个对象来引用,一旦对象引用被final修饰后,它只能恒定指向一个对象,无法改变其指向另一个对象;一个被final+static修饰的字段,只会占据一段不能改变的存储空间。
package com.lzw;import static java.lang.System.out;import java.util.Random;class Test {int i = 0;
}public class FinalData {static Random rand = new Random();private final int VALUE_1 = 9; //定义一个final常量private static final int VALUE_2 = 10; //声明一个final,static常量private final Test test = new Test(); //声明一个final引用private Test test2 = new Test(); //声明一个不少final的引用private static final int[] a = {1, 2, 3, 4, 5, 6}; //声明一个final的数组private final int i4 = rand.nextInt(20); //返回一个随机整数private static final int i5 = rand.nextInt(20);public String toString() {return i4 + " " + i5 + " ";}public static void main(String[] args) {FinalData data = new FinalData();
// data.test = new Test(); 不能将指定为final的引用指向其他引用
// data.VALUE_1++; 不能修改定义为final的常量值data.test2 = new Test(); //可以将没有设定为final的引用指向其他引用for (int i = 0; i < data.a.length; i++) {a[i] = 9;out.println("-----" + a[i]);}out.println(data); //10 2out.println("data2"); //data2out.println(new FinalData()); //0 2out.println(data); //10 2}
}输出:-----9-----9-----9-----9-----9-----97 9data214 97 9
package com.lzw;import static java.lang.System.out;
import java.util.Random;public class FInalStaticData {private static Random rand = new Random(); //实例化一个Random类对象private final int a1 = rand.nextInt(10); //赋值定义为final的a1private static final int a2 = rand.nextInt(10); //赋值定义为static final 的a2public static void main(String[] args) {FInalStaticData fdata = new FInalStaticData(); //实例化一个对象out.println("实例化对象调用a1的值:" + fdata.a1); //实例化对象调用a1的值:5out.println("实例化对象调用a2的值:" + fdata.a2); //实例化对象调用a2的值:9FInalStaticData fdata2 = new FInalStaticData(); //重新实例化一个对象out.println("重新实例化对象调用a1的值:" + fdata2.a1); //重新实例化对象调用a1的值:1out.println("重新实例化对象调用a2的值:" + fdata2.a2); //重新实例化对象调用a2的值:9}
}
从上述运行结果看,定义final的常量不是恒定不变的,将随机数赋值给final常量,可以做到每次运行程序时改变a1的值,但a2的值因为被声明称static final形式,所以恒定不变。a2是在装载时被初始化,而不是每次创建新对象时都被初始化;而a1会在每次实例化新对象时被改变。
3.2 final方法
被final声明的方法,不能被重写。被private修饰的成员,不能被其他类访问。
package com.lzw;class Parents {private final void doIt() {System.out.println("父类.doIt()");}final void doIt2() {System.out.println("父类.doIt2()");}public void doIt3() {System.out.println("父类.doIt3()");}
}class Sub extends Parents {public final void doIt() {System.out.println("子类.doIt()");}// final void doIt2(){} 父类的final方法不能被重写覆盖public void doIt3() {System.out.println("子类.doIt3()");}
}public class FinalMethod {public static void main(String[] args) {Sub s = new Sub();s.doIt(); //子类.doIt()s.doIt2(); //父类.doIt2()s.doIt3(); //子类.doIt3()System.out.println("----------------");Parents p = s; //向上转型p.doIt2(); //父类.doIt2()p.doIt3(); //子类.doIt3()}
}
3.3 final类
语法:
final class 类名{}
3.3.1 被final声明的类,不能被继承。
3.3.2 final类中所有的方法都隐式地被设置为final形式,但是成员变量可以定义为非final形式。
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"Java类包+final声明":http://eshow365.cn/6-25895-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!