重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这个问题是由于在写JJ文件的时候,并没有设置生成的JAVA类为非静态的,那么在JAVACC生成类的时候会默认生成静态类.如果是静态类的话,在调用的时候就只能用静态方法调用.
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的恒山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
静态调用,我一直都没有调用成功,最后无奈之下,还是修改了JJ文件,重新生成.
在JJ文件的开头,加上option,设置其生成非静态类,如下:
//这个是包名,具体包的划分以及继承类包的层次请参阅JAVA方面的书籍
//在这个例子里面 类A 和类B 是在同一个包下
//package a;
//A类,这个类是 父类
public class A {
//a 是A类的私有属性
private String a = "我是a";
//b 是可以被继承的属性
public String b = "我是b";
//该方法可以被继承
//虽然 属性a 不能被继承,
//但是可以通过构造公有方法来实现对属性 a 的调用
public String getA(){//获取属性a的值
return a;
}
//该方法可以被继承
//虽然 属性a 不能被继承,
//但是可以通过构造公有方法来实现对属性 a 的调用
public void setA(String aa){//对属性a进行设置
a = aa;
}
//该方法可以被继承
public String getB(){//获取属性b的值
return b;
}
//该方法可以被继承
public void setB(String bb){//对属性b进行设置
b = bb;
}
}
//---------------------------我是分类符------------------------
//package a;
//B 类,这个类是 A 类的子类(继承类)
public class B extends A {
//B类是新建立的类,最好不要写在和A类同一个java文件下
//由于 B 类继承了A类,
//所以 A 类注明的公有方法可以不用写在 B 类中
//只需要声明并实例化 B 的对象就可以调用 A 类中的公有方法
//B 类 中也可以书写 A类中没有的方法以达到B类所需要达到的目的
//其他访问权限修饰符在这里先不做解释(protected等)
//属性c 是 A 类中没有的
String c = "我是B类中的c";
//该方法A类中没有,只能通过声明并实例化B类的对象才能调用
public String getC (){
return c;
}
//该方法A类中没有,只能通过声明并实例化B类的对象才能调用
public void setC(String cc){
c = cc;
}
//main方法
public static void main(String[] args) {
B b = new B();
//String a1 = b.a;//这个就是错误的,因为a是A类的私有变量,不能被继承
String b1 = b.b;//这个就可以
String b_a = b.getA();//也可以调用
String b_b = b.getB();//也可以调用
System.out.println("a 的值 = " + b_a);
System.out.println("b 的值 = " + b_b);
b.setA("修改a");//设置a 的值
System.out.println("修改过后的 a 的值 = " +
b.getA());
b.setB("修改b");//设置b 的值
System.out.println("修改过后的 b 的值 = " +
b.getB());
String b_c = b.c;//设置c 的值
System.out.println("B类中c的值"+b_c);
b.setC("修改c");
System.out.println("修改过后的 c = " + b.getC());
}
}
如果全局变量的类型是“public static final”的,那么变量的值是不会被改变的;
如果全局变量的类型是“public static ”的,那么变量的值是可以被随意改变的;
解释:在java中final变量表示的是最终的,也就是在程序初始化加载到内存中,之后不可以被任何对象修改,如果没被定义为final的话,可以重新赋值的。
Test tt=new Test();
tt=test;
tt.setId("2");
注意Test tt这里的tt只是一个对象的引用,就好像C中的指针一样
tt=test;这句话是把test引用指向的对象的地址交给tt,即tt跟test指向了同一个对象
要达到你的目的,可以采用以下方法:
第一,Test tt=new Test();后把test的每个属性的值赋给tt
第二,就是克隆了,clone函数,原理跟上面一样,不过更复杂,涉及到深复制和浅复制问题