zoukankan      html  css  js  c++  java
  • java面试第四天

    修饰符static: 把对象相关的变成类相关的,它可以修饰属性、方法、代码块和内部类

             static修饰属性(类变量):

                      那么这个属性就可以用" 类名.属性名 "来访问,也就是使这个属性成为本类的类变量,为本类对象所共享。

                      类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件读入JVM(java虚拟机),这个过程称为类的加载。JVM会通过类路径(CLASSPATH)来找字节码文件。需要的时候才会进行类加载,生成对象时是先加载后构造

                      类变量,会在加载时自动初始化,初始化规则和实例变量相同。

                      注意:

                               类中的实例变量是在创建对象时被初始化的

                               static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。

                              

             static修饰方法(静态方法):

                      会使这个方法成为整个类所公有的方法,可以用" 类名.方法名 "访问。

                      static修饰的方法,不能直接访问本类中的非静态成员,但本类的非静态方法可以访问本类的静态成员。

                      在静态方法中不能出现this关键字。

                      父类中是静态方法,子类中不能覆盖为非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。(在使用对象调用静态方法时其实是调用编译时类型的静态方法)

                      java中的main方法必须写成static的原因:在类加载时无法创建对象,而静态方法可以不通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。

                     

             static修饰初始代码块:

                      这时这个初始代码块就叫做静态初始代码块,这个代码块只在类加载时被执行一次。

                      可以用静态初始代码块初始化一个类。

                      动态初始代码块,写在类体中的“{}”,这个代码块是在生成对象时运行,这种代码块叫动态初始代码块。Static{ }

                     

    单例设计模式:

             一个类只允许有一个对象,保证所有引用的对象都是同一个对象。

             因为只允许存在一个对象,则不允许在外面直接new出新的对象,所以应该把构造器设为private,。

             在类内定义一个公开的静态方法,让使用者进行调用,通过该方法去获得一个实例。

             例:

                      public calss Singleton{

                               private static Singleton s;

                               private Singleton(){}

                      public static  Synchroinized Singleton newInstance(){

                                        if ( s == null)

                                                 s = new Singleton();

                                        return s;

                               }

                      }       

                     

    修饰符final:不允许改变,可以修饰变量、方法、类

             final修饰变量:

                      被final修饰的变量就会变成常量,一旦赋值不能改变

                      常量可以在初始化时直接赋值,也可以在构造方法里赋值,只能在这两种方法里二选一,不能不为常量赋值

                      常量不会有默认初始值

                      锁定栈,使栈中的数据不可以改变

                      静态常量只能在初始化时直接赋值

                     

             final修饰方法:

                      被final修饰的方法将不能被其子类覆盖,保持方法的稳定不能被覆盖

            

             final修饰类:

                      被final修饰的类将不能被继承

                      final类中的方法也都是final的

            

             注意:

                      final不能用来修饰构造方法

                     

    访问权限控制:    

             private:

                      本类内部可以访问

                      不能继承到子类

             default:

                      本类内部可以访问,同包其他类也可以访问。

                      同包可继承

             protected:

                      本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。

                      能继承到子类

             public:

                      任何地方都可以访问 

                      能继承到子类

  • 相关阅读:
    poj 2482 Stars in Your Window + 51Nod1208(扫描线+离散化+线段树)
    bzoj 1036: [ZJOI2008]树的统计Count (树链剖分+线段树 点权)
    树链剖分+线段树 单点修改 区间求和 模板
    bzoj 2124 等差子序列 (线段树维护hash)
    hdu 5638 Toposort (拓扑排序+线段树)
    hdu 5195 DZY Loves Topological Sorting (拓扑排序+线段树)
    Codeforces Round #250 (Div. 1) D. The Child and Sequence(线段树)
    hive 显示当前数据库名
    【Linux】ssh-keygen 的使用方法及配置 authorized_key s两台linux机器相互认证
    python email 模块
  • 原文地址:https://www.cnblogs.com/hoobey/p/5187644.html
Copyright © 2011-2022 走看看