黑马程序员技术交流社区
标题:
java主函数问题
[打印本页]
作者:
不冬眠的蚂蚁
时间:
2014-1-11 12:21
标题:
java主函数问题
java主函数时static 类型的方法 为什么(用对象)就可以去访问本类或外部类非静态函数和成员变量 不是说静态成员只能访问静态成员吗?
作者:
黄晓鑫
时间:
2014-1-11 13:11
静态只能访问静态 main函数是一个特殊的函数 要去访问外部类的成员必须创建对象 或者该外部类必须有静态方法 才可以直接类名.调用
作者:
mrwise1991
时间:
2014-1-12 18:18
不错,静态调用非静态属性时会出现问题,但这里你所说的,可能没有正确的表达你自己的意思吧?或许贴上代码会更好点
作者:
Lillian
时间:
2014-1-12 22:56
staticd的方法只能访问静态成员的意思是指 像面向过程中调用方法那样去访问,这些方法在同一个类中:
class Student{
private String name;
private int age;
private long id;
public Student(String name, int age){
this.name = name;
this.age = age;
}
public static Student getStudent(){
return new Student("zhangsan",18);
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public static void main(String[] args){
getStudent();//正确 ,静态访问静态
getAge();//错误,静态只能访问静态
}
}
复制代码
static之所以只能访问静态是因为如果直接访问getAge,他是对对象的操作,但是静态函数执行时没有对象,所以就会出错。
这个跟是不是main函数没有关系的,可以看一下下面的代码:
public class PersonTest {
public static void main(String[] args){
Student stu1 = new Student("tom", 20);
stu1.getName(); //正确,因为代码知道去访问谁 这里是对对象的非静态方法的调用
Student.getStudent();//静态要用类名进行调用
test1(); //不使用任何前缀调用本类的静态方法
test2();//错误,静态只能调用静态
new PersonTest().test2();//通过对象来调用非静态方法
}
public static void test1(){
Student stu1 = new Student("tom", 20);
stu1.getName(); //正确,因为代码知道去访问谁 这里是对对象的非静态方法的调用
//不是main函数,普通的static方法也是可以这样子去调用对象的非静态方法
}
public void test2(){
System.out.println("非静态方法");
}
}
复制代码
作者:
不冬眠的蚂蚁
时间:
2014-1-12 23:00
Lillian 发表于 2014-1-12 22:56
staticd的方法只能访问静态成员的意思是指 像面向过程中调用方法那样去访问,这些方法在同一个类中:
谢谢 和详细
作者:
mrwise1991
时间:
2014-1-13 23:15
这一点,我以前有点理解误区,直到今天我看了
陈昊鹏的《JAVA编程思想》,
我才豁然开朗,书中原文是这样的:
由于在用static方法前不需要创建对象所以对于static方法,不能简单地通过调用其他非static属性和方法而没有指定某个命名对象来直接访问非static属性或方法,因为非static属性或方法必须与某一特定对象关联
。也就是说我们
可以在static方法中,通过实例化的对象来访问其中的非static属性或方法!!!!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2