zoukankan      html  css  js  c++  java
  • java字段中初始化的规律与如何用静态成员函数调用非静态成员

    java字段中初始化的规律:

    执行以下代码,出现的结果是什么?

    class InitializeBlockClass{

    {

        field=200;

    }

    public int field=100;

    public InitializeBlockClass(int value){

    this.field=value;

    }

    public InitializeBlockClass(){

    }

    }

    public class InitializeBlockDemo {

    /**

     * @param args

     */

    public static void main(String[] args) {

    InitializeBlockClass obj=new InitializeBlockClass();

    System.out.println(obj.field);

    obj=new InitializeBlockClass(300);

    System.out.println(obj.field);

    }

    }

    输出的结果为100300

    原因:Java中进行初始化的地方有两个:一个是构造函数,一个是初始化块,

    在一个,当类中有初始化块是,如果调用无参数的构造函数,他会按照程序的顺序逐一调用函数,后边的函数可以把前边的都替换掉。若调用的是有参数的构造函数,则输出的是自己赋给的初值。

    静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    执行以下代码:

    package tur3;

    public class Jingtai {

    public  int num;

     static void change(Jingtai a)

     {

     a.num=10;

     }

    public static void main(String[] args)

    {

    Jingtai b=new Jingtai();

    b.num=100;

    b.change(b);

    System.out.println(b.num);

    }

    }

    输出的结果为:

    该程序的输出结果为  10

    原因:通常情况下,静态方法是不能访问类的非静态成员函数以及非静态的变量,因为类里边的静态成员属于类,不用声明类的对象时,静态成员就已经存在了,而非静态成员必须在声明类的对象后才可以分配内存空间,所以类的对象不可以访问类中静态成员。但是,如果先要在静态成原函数中调用非静态中的变量或方法,可以在静态成员函数中声明一个类的对象,然后再调用类的非静态成员或方法。

  • 相关阅读:
    Java 8特性
    11成最多体积的容器
    MySQL数据库理解
    java范型
    ArrayList源码分析
    1.面试题
    jvm简单了解
    121. 买卖股票的最佳时机
    有效的括号
    java如何判断一个字符串中某个字符有几个
  • 原文地址:https://www.cnblogs.com/ljysy/p/7689073.html
Copyright © 2011-2022 走看看