黑马程序员技术交流社区
标题:
感觉是一个很基础的问题,但我不明白为什么。
[打印本页]
作者:
yjiang_09
时间:
2014-8-31 01:49
标题:
感觉是一个很基础的问题,但我不明白为什么。
本帖最后由 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开发经验,虽然是赋值粘贴。。现在感觉这应该很简单的一个问题确让自己摸不着头脑。哎,真的深深地鄙视自己。。。。。。以为自己有点基础,都是假象,因为之前看过基础视频,所以现在在看高新技术,准备看完高新技术再好好回顾下基础。
作者:
hejinzhong
时间:
2014-8-31 05:09
(1)private是因为只是类本身自己使用,不用对外暴漏,public也没有错。
(2)静态方法只能调用静态内容,你说的你可以调用非静态函数,是因为你创建对象后,对象调用的。
作者:
笑脸迷人
时间:
2014-8-31 06:49
沙发不错~
作者:
谢建平
时间:
2014-8-31 07:10
道理 很简单啊 static 是类加载进来就存在了 优先对象存在 没用static 修饰的得等有对象才出现 你用一个先存在的东西 调用 一个可能还不存在的东西 肯定报错。
作者:
奋发吧小白
时间:
2014-8-31 07:28
1,直接用private 这是 在应用封装思想,一般能不暴露的 就不暴给外面,2:主函数是静态的 所以 在主程序里面所写的函数若是被主函数调用,必须也是静态的,应为只有静态的只能调用静态的!若是在主函数中是引用非静态的,只能通过对象本身去调用!
作者:
张周飞
时间:
2014-8-31 09:50
对 !沙发回复 不错
学习了
作者:
她只是过客
时间:
2014-8-31 12:12
楼上们说的没错{:3_47:}
作者:
范鹏霄
时间:
2014-8-31 12:41
用private是基于封装思想,其他类不能调用。
main方法是静态的,可以直接调用静态方法,要调用非静态方法要先实例化对象
作者:
彭卫红
时间:
2014-8-31 14:16
恩,一楼很详细,学习了
作者:
wfaly
时间:
2014-9-6 16:21
学习了.....Thanks
作者:
cherry@cookie
时间:
2014-9-6 17:00
static void main是静态方法,而静态方法只能调用静态方法。所以printOb()方法得用static修饰,或者你把这个方法写到类中 创建对象,通过对象名.方法名调用,printOb()就不用static修饰了。
作者:
F@C
时间:
2014-9-6 17:12
进来学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2