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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘文飞 中级黑马   /  2012-10-19 11:54  /  1536 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘文飞 于 2012-10-19 14:28 编辑

代码:
——————————————————————————————————————————————
import java.util.*;
import java.text.*;
public class SimpleDateFormatDemo01{
        public static void main(String args[]){
                String strDate = "2012:10-19 10:59:38:839";
                String pat1 = "yyyy:MM-dd HH:mm:ss:SSS";
                String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒";
                SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);
                SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);
                //Date d = null;
                try{
                        Date d = sdf1.parse(strDate);//声明的时候直接赋值怎么不行,而要先在前面Date d = null
                }catch(Exception e){
                        e.printStackTrace();
                }
                System.out.println(sdf2.format(d));
        }
}

————————————————————————————————————————————
错误提示:
————————————————————————————————————————————————————————
I:\code\java>javac SimpleDateFormatDemo01.java
SimpleDateFormatDemo01.java:16: 找不到符号
符号: 变量 d
位置: 类 SimpleDateFormatDemo01
                System.out.println(sdf2.format(d));
                                               ^
1 错误



评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
因为你在后面还调用了变量d的,不能把它定义在try代码块中
import java.util.*;
import java.text.*;
public class SimpleDateFormatDemo01{
        public static void main(String args[]){
                String strDate = "2012:10-19 10:59:38:839";
                String pat1 = "yyyy:MM-dd HH:mm:ss:SSS";
                String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒";
                SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);
                SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);
                //Date d = null;
                try{
                        Date d = sdf1.parse(strDate); //如果在此定义变量,那么后面出来try代码块就不能用了声明
                }catch(Exception e){
                        e.printStackTrace();
                }
                System.out.println(sdf2.format(d)); //d是局部变量
        }
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
有没有听说过一句话——局部变量,出了大括号就没人认识它。
你把Date d = sdf1.parse(strDate);写在了try{}里面,而在{}外面调用System.out.println(sdf2.format(d));
是不对的。
我改了一下你的代码
  1. import java.util.*;
  2. import java.text.*;
  3. public class SimpleDateFormatDemo01{
  4.         public static void main(String args[]){
  5.                 String strDate = "2012:10-19 10:59:38:839";
  6.                 String pat1 = "yyyy:MM-dd HH:mm:ss:SSS";
  7.                 String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒";
  8.                 SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);
  9.                 SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);
  10.                 //Date d = null;
  11.                 try{
  12.                         Date d = sdf1.parse(strDate);//声明的时候直接赋值怎么不行,而要先在前面Date d = null
  13.                         System.out.println(sdf2.format(d));
  14.                 }catch(Exception e){
  15.                         e.printStackTrace();
  16.                 }
  17.                
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
定义变量需要注意变量的作用区域,局部变量是只能作用在它所在的代码块和其内部代码块的,就像你在try代码块中定义了 d 变量,那么在catch和try上层代码块就无法访问了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

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