A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-张洋 中级黑马   /  2013-2-26 10:38  /  2419 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.exam;

public class test {

        /**
         * @param args
         */
        public static void main(String[] args) {
               
                student stu1=null;
                stu1.say();
                ((student)null).say();
        }




}
class student
{       
        public static void say(){
                System.out.println("有一个学生say");
        }
       
}
输出结果:
有一个学生say
有一个学生say

鄙人愚钝,恐怕两个输入都需要解释

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

7 个回复

倒序浏览
本帖最后由 陈圳 于 2013-2-26 10:52 编辑

是对象,是系统为字符类对象隐式的初始化.然后你赋初值后,引用变量才显示初始化的.
你的输出在语法中有点问题,如果你用eclipse的话会提示,因为你是用对象调用静态函数.静态函数属于全局函数.应该用类名.静态方法调用的;
student(null)类似于:(int)5:将5转换为int型
回复 使用道具 举报
本帖最后由 黑马刘杰 于 2013-2-26 11:00 编辑

你这里是静态方法,静态方法属于类,不用对象就可以引用。不过必须指明是是这个类。举个例子:
  1. public class Test {
  2.     public static void main(String[] args) {
  3.         (PrintOut.getInstance()).printName();
  4.     }
  5. }

  6. class PrintOut {   
  7.     public static void printName() {
  8.         System.out.println("我输出啦。。。");
  9.     }
  10.    
  11.     public static PrintOut getInstance(){
  12.             return null;
  13.     }
  14.    
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
陈圳 发表于 2013-2-26 10:46
是对象,是系统为字符类对象隐式的初始化.然后你赋初值后,引用变量才显示初始化的.
你的输出在语法中有点问 ...

谢谢你了,大概看明白了
回复 使用道具 举报
黑马刘杰 发表于 2013-2-26 10:58
你这里是静态方法,静态方法属于类,不用对象就可以引用。不过必须指明是是这个类。举个例子: ...

谢谢你和你的列子
回复 使用道具 举报
类名要大写,分清引用和对象,stu1叫引用,不叫对象,stu1指向的new Xxx();才叫对象。引用可以是null,就是没指向任何对象的意思,null不是一个对象。
静态方法应该用类名调用,但是用这个类类型的引用也能调用,用具体的引用调用静态方法的过程还是通过引用的类型找到具体的类,来调用。
回复 使用道具 举报
何伟 中级黑马 2013-2-26 13:52:31
7#

package com.exam;

public class test {

        /**
         * @param args
         */
        public static void main(String[] args) {
               
                student stu1=null;//这里对像是创建了,不过值是null,也就是在stu1没有实体指向,null是引用类型的默认值,0是基本类型默认值
                stu1.say();//stu1是student类型调用static say方法也是没问题的
                ((student)null).say();//null是引用类型空值,转成student类型,在调用static方法,这里能输入的原因是say方法是static,是可以值接类名student.say调用的
        }




}
class student
{        
        public static void say(){//say方法用static修饰了,可以直接类名调用
                System.out.println("有一个学生say");
        }
        
}
回复 使用道具 举报
其他的上面的都说了很详细了  我补充下我认为的


null本身不是对象,也不是Objcet的实例



null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。

可以做一个简单的例子:
  1. //null是对象吗? 属于Object类型吗?

  2.         if (null instanceof java.lang.Object) {

  3.             System.out.println("null属于java.lang.Object类型");

  4.         } else {

  5.             System.out.println("null不属于java.lang.Object类型");

  6.         }

复制代码
结果会输出:null不属于java.lang.Object类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马