zoukankan      html  css  js  c++  java
  • 杂记

    Java与c++类似,不用new来创建变量,而是创建一个并非是引用的‘自动’变量。这个变量直接存储‘值’并置于堆栈中,因此更加高效。

    Java的主要目标是安全性,所以许多在c++中出现的问题不会出现在Java中,Java确保数组会被初始化,而且不能在它的范围之外被访问,这种范围检查是以每个数组上少量的内存开销及运行时的下标检查为代价的。

    string s这个操作创建的只是引用,并不是对象,如果向s发送一个消息就会返回一个运行时错误,因此创建一个引用的同时便进行初始化 string s="asdf"

    由new创建的对象只要需要就一直会存在下去,这样C++中存在的内存泄漏问题就不存在了,对象内存的收回有GC进行。

    当声明一个事物是static时,就意味着这个域或者这个方法不会与包含它的那个类的任何对象实例关联在一起。所以即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。

    对于

    static StaticTest{

    static int i=4;

    }现在即使创建了两个StaticTest对象,StaticTest.i也只有一份存储空间,这两个类共享一个i。

    对于静态方法,可以像对于其他方法一样使用对象名.方法名()调用,也可以使用类名.方法名()调用

    在static方法内部不能调用非静态方法,但是在非静态方法中却可以调用static内部的方法。


    垃圾回收器只知道释放那些经由new分配的内存,但是并没办法应对非new申请的内存,针对此情况Java允许在类中定义一个名为finalize()方法,一旦垃圾回收器打算回收对象占用的内存,将首先调用finalize()方法,并且在下一次垃圾回收动作发生时才会真正回收对象占有的内存,但是finalize()函数不同于c++中的析构函数,c++中销毁一个对象必须用到析构函数且对象一定会被销毁,但是Java中的对象可能被垃圾回收器回收也可能不会被垃圾回收器回收,垃圾回收不等于析构。Java并没有提供“析构函数”或者相似的概念,要做类似的工作必须动手创建一个执行情路工作的普通方法,比如,假设一个对象在创建的过程中将自己绘制到屏幕上,如命不明确将其从屏幕上擦出则将一直存在在屏幕上,如果在finalize(0方法中加入某种擦出功能,当垃圾回收发生时(不能保证一定发生)finalize得到了调用,图像将被擦出,要是垃圾回收没有发生则图像会被一直保留下来。如果一个对象直至程序退出还没有被垃圾回收器回收,则占有的资源将会在退出时归还给操作系统。

    垃圾回收器只负责释放对象占有的空间,二finalize函数只针对一种情况就是通过某种创建对象方式以外的方式的方式为对象分配了空间。


     


    当定义数组时有int []arry;时拥有的只是对数组的一个引用(可以认为为该引用分配了足够的存储空间)但是并没有给数组对象本身分配任何空间,在初始化时为数组对象分配空间,而且初始化动作可以出现在代码的任何地方。 



    final

    final分为三种情况:数据、方法、类

    final数据表示一个永不改变的常量,但对象是非基本类型时,表示引用恒定不变,然而对象本身是可以改变的。

    final参数意味着无法在方法中更改参数引用所指向的对象。

    final方法可以把方法锁定,不允许任何子类进行修改,还有就是考虑到效率的问题,如果将一个方法指名为final就是同意编译器将针对该方法的所有调用都转为内嵌调用。

    final类表示改类不允许继承,该类的设计永远不要变动。


     

  • 相关阅读:
    css设置页面内容不能被选中
    bootstrap栅格系统
    MVC框架
    类模板
    c++编译器模板机制剖析
    函数模板与函数重载
    函数模板当参数强化
    泛型编程—函数模板
    用友GRP-u8 注入-RCE漏洞复现
    漏洞代码调试(二):Strtus2-001代码分析调试
  • 原文地址:https://www.cnblogs.com/tao7/p/12493272.html
Copyright © 2011-2022 走看看