当前位置: 首页 > news >正文

在线商城网站模板品牌网站建设公司有哪些

在线商城网站模板,品牌网站建设公司有哪些,网站开发完后期维护重要吗,专业的医疗行业网站模板依据上下文环境#xff0c;java的keywordfinal也存在着细微的差别#xff0c;但通常指的是“这是无法改变的。”不想改变的理由由两种#xff1a;一种是效率#xff0c;还有一种是设计。因为两个原因相差非常远#xff0c;所以关键子final可能被吴用。 接下来介绍一下使用…    依据上下文环境java的keywordfinal也存在着细微的差别但通常指的是“这是无法改变的。”不想改变的理由由两种一种是效率还有一种是设计。因为两个原因相差非常远所以关键子final可能被吴用。    接下来介绍一下使用到fianl的三中情况数据方法类。       final数据    很多编程语言都有某种方法来向编译器告知一块数据是恒定不变的。有时数据的恒定不变是非常实用的比如 1一个编译时恒定不变的常量 2一个在执行时初始化而你不希望它被改变。    对于编译期常量的这样的情况编译器能够将该常量值代入不论什么可能用到它的计算式中也就是说能够在编译期就执行计算式这减轻了一些执行时的负担。在java中这类常量必须是基本类型而且以final表示。在对这个常量定义时必须进行赋值。    一个即是static又是fianl的域仅仅占一段不能改变的存储空间。    当final应用于对象引用时而不是基本类型时其含义有些让人疑惑。对基本类型使用fianl不能改变的是他的数值。而对于对象引用不能改变的是他的引用而对象本身是能够改动的。一旦一个final引用被初始化指向一个对象这个引用将不能在指向其它对象。java并未提供对不论什么对象恒定不变的支持。这一限制也通用适用于数组它也是对象。    以下的事例示范fianl域的情况。注意依据惯例即是static又是fianl的域(即编译器常量)将用大写表示并用下划切割个单词 package reusing; //: reusing/FinalData.java // The effect of final on fields. import java.util.*; import static net.mindview.util.Print.*; class Value { int i; // Package access public Value(int i) { this.i i; } } public class FinalData { private static Random rand new Random(47); private String id; public FinalData(String id) { this.id id; } // Can be compile-time constants: private final int valueOne 9; private static final int VALUE_TWO 99; // Typical public constant: public static final int VALUE_THREE 39; // Cannot be compile-time constants: private final int i4 rand.nextInt(20); static final int INT_5 rand.nextInt(20); private Value v1 new Value(11); private final Value v2 new Value(22); private static final Value VAL_3 new Value(33); // Arrays: private final int[] a { 1, 2, 3, 4, 5, 6 }; public String toString() { return id : i4 i4 , INT_5 INT_5; } public static void main(String[] args) { FinalData fd1 new FinalData(fd1); //! fd1.valueOne; // Error: cant change value fd1.v2.i; // Object isnt constant! fd1.v1 new Value(9); // OK -- not final for(int i 0; i fd1.a.length; i) fd1.a[i]; // Object isnt constant! //! fd1.v2 new Value(0); // Error: Cant //! fd1.VAL_3 new Value(1); // change reference //! fd1.a new int[3]; print(fd1); print(Creating new FinalData); FinalData fd2 new FinalData(fd2); print(fd1); print(fd2); } } /* Output: fd1: i4 15, INT_5 18 Creating new FinalData fd1: i4 15, INT_5 18 fd2: i4 13, INT_5 18 */      因为valueOne和VALUE_TWO都是带有编译时数值的fianl基本类型所以它们二者均能够用作编译期常量而且没有重大差别。VALUE_THREE是一种更加典型的对常量进行定义的方式定义为public能够被不论什么人訪问定义为static则强调仅仅有一份定义为fianl这说明它是个常量。请注意带有恒定初始值(即编译期常量)的final static基本类型全用大写字母命名而且字母与字母之间用下划线隔开。    我们不能由于某些数据是fianl的就觉得在编译时能够知道它的值。在执行时使用随机数来初始化i4和INT_5的值叫说明了这一点。事例部分也展示了将fianl数据定义为static和非static的差别。此差别仅仅有当数值在执行时内被初始化时才会显现这是由于在编译器对编译时的数值一视同仁(而且他们可能由于优化而消失)。当执行时会看见这个差别。请注意在此fd1和fd2中i4的值是唯一的每次都会被初始化为15,13。INT_5的值是不能够通过创建第二个FinalData对象加以改变的。这是由于他是static的在装载类时(也就是第一次创建这个类对象时)已经被初始化而不是每次创建都初始化。     假设看上面的事例来理解我标记颜色的的部分有点困难的话请看以下的事例      public class B3 { static Random r new Random(12); final int int1 r.nextInt(100);//产生0-99的随机数 static final int INT_2 r.nextInt(100); public static void main(String[] args) { B3 b1new B3(); System.out.println(int1:b1.int1 INT_2:b1.INT_2); B3 b2new B3(); //b2.INT_2100;//错误的赋值 System.out.println(int1:b2.int1 INT_2:b2.INT_2); } } 启动main()先运行的是B3 b1new B3();创建B3的第一个对象这将会先初始化static final int INT_2 r.nextInt(100);然后是初始化final int int1 r.nextInt(100);所以第一条输出语句的结果是int1:12    INT_2:66。接下来创建B3的第二个对象这也会导致B3类中成员的初始化但static final int INT_2 r.nextInt(100);不会在被初始化为什么前面已经提过。输出的结果是int1:56    INT_2:66。两次的输出INT_2的值都是一样的。    在说回我们的第一个事例V1到VAL_3说明final引用的意义。正如在main()方法中看见的能够改变对象数组a的值但不能将a的引用指向还有一个对象。看起来使基本类型成为fianl比引用类型成为final的用处大。     java或许生成空白final,所谓空白final是指被声明为final但又未给初值的域。不管什么情况下编译器都会保证final域在使用前初始化。但空白final在fianl的使用上提供了非常大的灵活性为此一个fianl域能够依据某些对象有所不同却又保持恒定不变的特性。以下的事例说明了一点。 class Poppet { private int i; Poppet(int ii) { i ii; } } public class BlankFinal { private final int i 0; // Initialized final private final int j; // Blank final private final Poppet p; // Blank final reference // Blank finals MUST be initialized in the constructor: public BlankFinal() { j 1; // Initialize blank final p new Poppet(1); // Initialize blank final reference } public BlankFinal(int x) { j x; // Initialize blank final p new Poppet(x); // Initialize blank final reference } public static void main(String[] args) { new BlankFinal(); new BlankFinal(47); } } //   final 參数       java中或许将參数列表中的參数以声明的方式声指明为final。这意味着你无发改变參数所指向的对象。 class Gizmo { public void spin() {} } public class FinalArguments { void with(final Gizmo g) { //! g new Gizmo(); // Illegal -- g is final } void without(Gizmo g) { g new Gizmo(); // OK -- g not final g.spin(); } // void f(final int i) { i; } // Cant change // You can only read from a final primitive: int g(final int i) { return i 1; } public static void main(String[] args) { FinalArguments bf new FinalArguments(); bf.without(null); bf.with(null); } } // 方法f()g()展示了基本类型的參数被指定为final是所出现的结果你能够读參数但不能改动參数。这一特性仅仅要用来向匿名内部类传递数据。 final 方法    使用final方法有两个原因。第一个原因是把方法锁定以防止不论什么继承它的类改动它的含义。这是出于设计的考虑想要确保在继承中使用的方法保持不变而且不会被覆盖。    过去建议使用final方法的第二个原因是效率。在java的早期实现中假设将一个方法指明为fianl就是允许编译器将针对该方法的全部调用都转为内嵌调用。当编译器发现一个final方法调用命令时它会依据自己的慎重推断跳过插入程序代码这样的正常的调用方式而运行方法调用机制将參数压入栈跳至方法代码处运行然后跳回并清理栈中的參数处理返回值而且以方法体中的实际代码的副本来取代方法调用。这将消除方法调用的开销。当然假设一个方法非常大你的程序代码会膨胀因而可能看不到内嵌所带来的性能上的提高由于所带来的性能会花费于方法内的时间量而被缩减。     上面标颜色的地方不太懂。不知道那位看过Java编程思想和知道的高人给解释解释。     在最进的java版本号中虚拟机(特别是hotspot技术)能够探測到这些情况并优化去掉这些效率反而减少的额外的内嵌调用因此不再须要使用final方法来进行优化了。其实这样的做法正逐渐受到劝阻。在使用java se5/6时应该让编译器和JVM去处理效率问题仅仅有在想明白禁止覆盖式才将方法设置为fianl的。     final和privatekeyword    类中的全部private方法都是隐式的制定为final的。因为你无法訪问private方法你也就无法覆盖它。能够对private方法加入final修饰词但这毫无意义。 class WithFinals { // Identical to private alone: private final void f() { print(WithFinals.f()); } // Also automatically final: private void g() { print(WithFinals.g()); } } class OverridingPrivate extends WithFinals { private final void f() { print(OverridingPrivate.f()); } private void g() { print(OverridingPrivate.g()); } } class OverridingPrivate2 extends OverridingPrivate { public final void f() { print(OverridingPrivate2.f()); } public void g() { print(OverridingPrivate2.g()); } }      覆盖仅仅有在某方法是基类接口的一部分时才会发生。即必须将一个对象向上转型为它的基类并条用同样的方法。假设某方法是private的它就不是基类接口的一部分。它仅是一些隐藏于类中的程序代码假设一个基类中存在某个private方法在派生类中以同样的名称创建一个publicprotected或包訪问权限方法的话该方法仅仅只是是与基类中的方法有同样的名称而已并没有覆盖基类方法。由于private方法无法触及且有非常好的隐藏性所以把它看成是由于他所属类的组织结的原因而存在外其它不论什么事物都不用考虑。     final 类     当将类定义为final时就表明了你不打算继承该类并且也不或许别人这样做。换句话说出于某种考虑你对该类的设计永不须要做不论什么变动或者出于安全的考虑你不希望他有子类。 class SmallBrain {} final class Dinosaur { int i 7; int j 1; SmallBrain x new SmallBrain(); void f() {} } //! class Further extends Dinosaur {} // error: Cannot extend final class Dinosaur public class Jurassic { public static void main(String[] args) { Dinosaur n new Dinosaur(); n.f(); n.i 40; n.j; } }     请注意final类的域能够依据个人的意愿选择是或不是final。不论类是否被定义为final相同的规则相同适用于定义为final的域。然而由于final是无法继承的所以被final修饰的类中的方法都隐式的制定为fianl由于你无法覆盖他们。在fianl类中能够给方法加入final但这不会产生不论什么意义。 转载于:https://www.cnblogs.com/hrhguanli/p/4011387.html
http://www.sadfv.cn/news/119853/

相关文章:

  • 优秀电商设计网站有哪些阿里云增加网站
  • 成都建设网站那家好广州站在哪个区
  • 网站建设写代码自己怎么创业企业咨询公司是做什么的
  • 龙华网站建设服务wordpress模板电商
  • 客户在我这做的网站被罚济南市章丘区建设局网站
  • 世界杯消息哪个门户网站做的好五站合一网站建设
  • 阿里云网站备案好了 怎么建站网站内容不显示
  • 五泉山网页设计宣传网站制作微信兼职网站开发
  • 网站建设美橙wordpress导入UI框架
  • phpcms手机网站模板一条龙网站建设哪家好
  • 南京一站式工程装饰装修网站绍兴本地网站建设
  • 十里堡网站建设图库
  • 英文网站建设580肇庆网站开发
  • 宝塔面板windows建站教程中小型网站建设教程
  • 网站怎么做gps定位wordpress注册显示密码
  • 使用wordpress在ec2上建网站cent7.4安装wordpress
  • 学做网站要学什么东西王占山
  • 沙县建设局网站网站建设工作室创业计划书
  • 有哪些站内推广的方式做dj网站需要
  • 网站快速注册在线制作图片渐变色
  • 淘宝网站怎么建设恐怖音乐怎么做的视频网站
  • 广州建网站多少钱python源码之家
  • 三门峡设计公司官网画质优化app下载
  • 网站优化待遇百度云网站开发
  • 网站设计 加英文费用网站建设和运营的教程
  • 新闻类网站建设邯郸市住建局官网
  • wordpress付费商业站公司章程范本
  • 网站开发外包项目网站网站建设交易平台
  • 网站后台策划wordpress博客破解主题
  • 汽车工厂网站建设注册网址怎么注册步骤