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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yjiang_09 于 2014-8-31 15:05 编辑

package com.sf.day1;

import java.lang.reflect.Array;
import java.util.Arrays;

public class ArrayRefl {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int a[]={1,2};
                int b[]=new int[5];
                int c[][]=new int[3][4];
                String  d[]=new String[]{"To","Be","No","1"};
                System.out.println(a.getClass()==b.getClass());//true.注:用等号,没必要用equals
                System.out.println(a.getClass().getName());//        [I
                System.out.println(c.getClass().getName());//        [[I
                System.out.println(c.getClass().getSuperclass().getName());//java.lang.Object
                System.out.println(d.getClass().getSuperclass().getName());//java.lang.Object
               
                Object obj1=a;
                Object obj2=b;
                Object obj3=c;
                Object obj4=d;
                //Object[] obj5=a;          //定义错误,a中元素为int类型,注意基本数据类型不是Object
                //Object[] obj5=b;
                Object[] obj6=c;             //可以,因为c中元素为一位数组,一维数组是Object
                Object[] obj7=d;
               
                System.out.println(a);                                //  [I@1db9742
                System.out.println(Arrays.asList(a));// [[I@1db9742]
                System.out.println(d);                //[Ljava.lang.String;@106d69c
                System.out.println(Arrays.asList(d));   //[To, Be, No, 1]
               
                printObj(a);
                printObj(d);
                printObj("hehe");
               
               
        }

        public static void printObj(Object obj) {
                // TODO Auto-generated method stub
                if(obj.getClass().isArray()){
                for(int i=0;i<Array.getLength(obj);i++)        
                        {
                                System.out.println(Array.get(obj, i));   //Array.get获取数组元素
                        }
                }else {
                        System.out.println(obj);
                }
               
        }
        

}
张老师视频里面是直接生成了private static void printObj这个方法代码块,
1,为什么直接生成的就是private,我用public也可以啊?但它弄成private肯定有道理,为什么呢?
2,为什么想要在main方法里调用printObj就必须让printObj是static类型。因为我试了把static删掉就掉用不了了,我感觉我平时直接在main方法里也可以调用 不是static的方法啊,基础还是太差了,想不通为什么,看过很多视频,可头脑里仍然好多错觉。
好歹也有了半年web开发经验,虽然是赋值粘贴。。现在感觉这应该很简单的一个问题确让自己摸不着头脑。哎,真的深深地鄙视自己。。。。。。以为自己有点基础,都是假象,因为之前看过基础视频,所以现在在看高新技术,准备看完高新技术再好好回顾下基础。


评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

12 个回复

倒序浏览
(1)private是因为只是类本身自己使用,不用对外暴漏,public也没有错。
(2)静态方法只能调用静态内容,你说的你可以调用非静态函数,是因为你创建对象后,对象调用的。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报
沙发不错~
回复 使用道具 举报
道理 很简单啊  static 是类加载进来就存在了      优先对象存在      没用static 修饰的得等有对象才出现   你用一个先存在的东西         调用 一个可能还不存在的东西   肯定报错。
回复 使用道具 举报
1,直接用private 这是 在应用封装思想,一般能不暴露的 就不暴给外面,2:主函数是静态的 所以   在主程序里面所写的函数若是被主函数调用,必须也是静态的,应为只有静态的只能调用静态的!若是在主函数中是引用非静态的,只能通过对象本身去调用!
回复 使用道具 举报
对 !沙发回复 不错
学习了
回复 使用道具 举报
1.private是封装的一种,进过private私有化后,其他类是看不到private所修饰的内容,这样就无法直接使用所修饰的内容,同时再提供一种外部调用private所修饰内容的间接方法,这样操作后,外部对于private所修饰内容的使用就受到了限制,从而保证了其安全性。
2,静态函数只能访问静态变量,因为静态中都是和对象无关的,只和类相关。
回复 使用道具 举报
楼上们说的没错{:3_47:}
回复 使用道具 举报
用private是基于封装思想,其他类不能调用。
main方法是静态的,可以直接调用静态方法,要调用非静态方法要先实例化对象
回复 使用道具 举报
恩,一楼很详细,学习了
回复 使用道具 举报
学习了.....Thanks
回复 使用道具 举报
static  void  main是静态方法,而静态方法只能调用静态方法。所以printOb()方法得用static修饰,或者你把这个方法写到类中  创建对象,通过对象名.方法名调用,printOb()就不用static修饰了。
回复 使用道具 举报
F@C 中级黑马 2014-9-6 17:12:56
13#
进来学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马