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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张晓辉 中级黑马   /  2013-9-6 18:29  /  1831 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张晓辉 于 2013-9-6 19:01 编辑
  1. class zifuchuanlianxi
  2. {
  3. public static void main(String[] args)
  4. {
  5. stringa b=new stringa(" ab fg ");
  6. b.gets();

  7. }
  8. }
  9. class stringa
  10. {
  11. private String str;
  12. stringa(String str)
  13. {
  14. this.str=str;
  15. }
  16. int start=0,end=str.length()-1;
  17. while (start<=end&&str.charAt(start)==' ')
  18. {
  19. start++;
  20. }
  21. while (start<=end&&str.charAt(end)==' ')
  22. {
  23. end--;
  24. }
  25. public void gets()
  26. {
  27. String s=str.substring(start,end+1);
  28. System.out.println(s);
  29. }
  30. }
复制代码
2
  1. class zifuchuanlianxi
  2. {
  3. public static void main(String[] args)
  4. {
  5. stringa b=new stringa(" ab fg ");
  6. b.gets();

  7. }
  8. }
  9. class stringa
  10. {
  11. private String str;
  12. stringa(String str)
  13. {
  14. this.str=str;
  15. }

  16. public void gets()
  17. {
  18. int start=0,end=str.length()-1;
  19. while (start<=end&&str.charAt(start)==' ')
  20. {
  21. start++;
  22. }
  23. while (start<=end&&str.charAt(end)==' ')
  24. {
  25. end--;
  26. }
  27. String s=str.substring(start,end+1);
  28. System.out.println(s);
  29. }
  30. }
复制代码
这是一个把输入字符串两端空格去掉的程序,图1编译不通过,图2编译通过,区别就是图1while循环语句直接放在了类中,图2放在方法中,后来想了想类中可以定义变量,常量,方法,貌似不能定义语句;为啥不能定义语句,但是我创建对象,数据初始化,并进行了初始运算,好像没什么不对啊。。。


评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

8 个回复

正序浏览
张晓辉 发表于 2013-9-6 20:15
请问下 静态属性跟静态代码块  哪个先初始化?如上例中的public static int a;跟static{}; ...

Java程序运行内存顺序(非完整版)
加载静态变量结构
加载静态方法
加载静态代码块并对静态变量进行初始化
加载实例变量结构
加载实例方法
加载构造方法
加载实例代码块
类加载发生在访问类的静态成员或创建对象时一个类只能被加载一次,加载完毕后将不释放
只学到这里,还有一些别的,暂时没学到- - 不过貌似可以回到你的问题了
回复 使用道具 举报
请问下 静态属性跟静态代码块  哪个先初始化?如上例中的public static int a;跟static{};
回复 使用道具 举报
构造函数,构造代码块,方法都可以用语句,没必要直接给语句啊,再说了类就是描述事物用的,属性和方法就可以了,要语句干吗?
回复 使用道具 举报
本帖最后由 王广亚 于 2013-9-6 19:16 编辑
张晓辉 发表于 2013-9-6 18:59
不错,构造方法中可以,静态方法中貌似不能,静态比属性先初始化,数据没进来,怎么处理,不过答案可鉴, ...

首先要明确,静态只能访问静态,所以要想在静态代码快中给成员赋值,那么这个成员也必须是静态的。
你看看下面这个例子能不能初始化。
  1. public class zifuchuanlianxi
  2. {public static int a;

  3.         static{
  4.                 a=12;
  5.         }
  6.         public static void main(String[] args)
  7.         {
  8.                 System.out.print(a);
  9.         
  10.         }
  11. }//还有就是我说的是静态代码块,你说的是静态方法,静态方法也是需要调用才能运行的
复制代码
回复 使用道具 举报
王广亚 发表于 2013-9-6 18:51
类中是不可以直接一些语句的,要想初始化对象你可以放在构造方法,和构造代码快中啊。要想在类加载时就初始 ...

不错,构造方法中可以,静态方法中貌似不能,静态比属性先初始化,数据没进来,怎么处理,不过答案可鉴,感谢。
回复 使用道具 举报
类中是不可以直接一些语句的,要想初始化对象你可以放在构造方法,和构造代码快中啊。要想在类加载时就初始化一些数据的话还可以放到静态代码块中。
回复 使用道具 举报
刚才给毕老师打电话了,毕老师回复“上帝就是这么定义的”,好吧,学生领教了。
回复 使用道具 举报
  1. while (start <= end && str.charAt(start) == ' ') {
  2.                 start++;
  3.         }
  4.         while (start <= end && str.charAt(end) == ' ') {
  5.                 end--;
  6.         }
复制代码
要放在方法里的

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马