我是一名学习软件工程的学生,现在,我正在“面壁修炼”,Java SE和io流,已经学习了快有半年的时间了,知识点已经掌握了,但是,没有做过太多的工程项目来巩固提高我的对于io流中的知识点的理解..
最近,我开始通过实验,锻炼我对于Java的io部分的知识的理解与提高.并且锻炼我目前还没有经验的“调试运行时错误的能力”.
我在D盘中建立了一个文件,如下:
这个文件中的内容是:
我运行了写好的下面的程序:
package c_port_packageDoctor;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
public static void start(){
try {
fops.write(19);
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
代码运行后,在console窗口中给出的结果如下:
高手,我知道“空指针异常”表示“在程序中有对象或者变量,没有被"初始化"造成了程序访问到这个标志符后,为能够得到一个"堆内存中的地址”,但是,高手,经过我仔细地检查:
我认为:
在整个程序中,“不可能出现"让程序发生空指针的语句"存在”...
整个程序并不复杂...
希望得到高手的点拨:
这里的“空指针异常”,出现的原因是什么...?
并且,积累“调试运行时程序错误”的最快的学习方法是什么?
看什么书?学习什么资源最快?
谢谢高手的点拨!!
一百分奉上!!
一位日日夜夜向着理想奔跑的筑梦者
2013年8月29日早晨5点58分
35 个解决方案
#1
希望高手尤其能够告诉我:
学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
谢谢高手的点拨!!
学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
谢谢高手的点拨!!
#2
。。。。。。
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html
#3
fops没有初始化。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。
#4
fops和dops都没初始化,要先new一个Test5调用构造方法初始化。
#5
得new下Test5类,另外分隔符最好用File.separator。
#6
学会查错,
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。
#7
根本就没有实例化兄弟。
#8
在构造函数中初始化,但是你又没有new Test5啊?
#9
你的文件名搞错了吧?把代码File file = new File("D:\\MyDoc\\text.txt")
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。
#10
要么创建Test5的对象调用它的属性,要么把初始化工作放到静态代码块中
#11
Test5构造器根本没有运行,你的start是static方法.执行时候根本不用创建Test5实例
#12
File file = new File("f:\\javasj\\hanruota.txt");// 我放在F盘了
if (file.exists() && file.isFile()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
String text;
while ((text = input.readLine()) != null)
txt.setText(txt.getText() + text + "\n");
} catch (IOException ioException) {
System.err.println("File Error!");
}
}
这个也许可以帮到你
if (file.exists() && file.isFile()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
String text;
while ((text = input.readLine()) != null)
txt.setText(txt.getText() + text + "\n");
} catch (IOException ioException) {
System.err.println("File Error!");
}
}
这个也许可以帮到你
#13
你的方法是静态的,也就是不需要new出类的实例就调用的,没有调用类的构造方法他怎么能够初始化的么
#14
楼主对Java的一些基本概念还需要再复习下,static关键字在class中的作用。
#15
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
构造器中的代码没有执行,main函数中的代码改成new Test5(). start();
#16
没有new Test5 怎么实例化 你的 dops 和 fops
#17
楼主你把start()方法的static去了你就可以发现你的程序有什么bug了。
#18
++
#19
package c_port_packageDoctor;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
#20
这个怎么没有关闭流呢?
#21
你是想读出还是写入,这个读出流你自己可以关闭的,就是file.flush();file.close();
#22
看到楼主,我放心了!楼主加油
#23
楼主难道是win7系统?
#24
没有实例化类的过程导致你两个对象没有创建对象。你再去使用这两个对象,自然就是空指针咯。
#25
你根本没有实例化test5!
写的这个程序太乱,按照常规的思路和编写方式来写吧。
写的这个程序太乱,按照常规的思路和编写方式来写吧。
#26
try {
// RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
// BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt"));
// DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
// PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));
//设置文本内容
String str="writer in text";
byte[] b=(str).getBytes();
//写入文件,还可以用其他方法如:write(String str)
bw.write(b,0,b.length);
bw.close();
// pw.write(str);
// pw.close();
} catch (IOException ex) {
System.out.println(ex);
}
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧
// RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
// BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt"));
// DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
// PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));
//设置文本内容
String str="writer in text";
byte[] b=(str).getBytes();
//写入文件,还可以用其他方法如:write(String str)
bw.write(b,0,b.length);
bw.close();
// pw.write(str);
// pw.close();
} catch (IOException ex) {
System.out.println(ex);
}
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧
#27
不建议看书,建议看看张龙的视频,圣思园的。
#28
没执行你的构造方法啊
#29
我觉得跟IO流没有关系,感觉还是先看下SE的基础知识吧。
#30
Test5()构造方法写的是初始化流,但是你没有调用啊,它肯定会抛出NullPointException
#31
还是同意#29楼的观点,,感觉跟IO没啥关系,强化一下自己的SE基础吧,基础打牢
#32
大家说的都对
#33
面向对象,你操作的哪一行报空指针,你操作的那个对象就是为null。想问楼主是否真的弄懂了面向对象?
#34
从问题的难易程度,看到回答的人的个数,从而推断出大牛的比例
#35
你真的学了半年了,并且知识点都已经掌握了?
#1
希望高手尤其能够告诉我:
学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
谢谢高手的点拨!!
学习=“调试较复杂多功能多线程im工具”的专业技术的书籍,有哪些?
并且,网络中有什么资源,能够让我的学习计划,“最快”“最具效果”...?
谢谢高手的点拨!!
#2
。。。。。。
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html
用debug调试走一下就清楚啦,start()方法里fops和dops都没有实例化。
debug很重要,必须学会!!
看这个视频
http://video.sina.com.cn/v/b/11881813-1281081403.html
#3
fops没有初始化。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。
fops的初始是在类创建对象的时候,而你是在static 方法里调用,却没有创建任何的Test5的对象,所以没有被初始化过。
#4
fops和dops都没初始化,要先new一个Test5调用构造方法初始化。
#5
得new下Test5类,另外分隔符最好用File.separator。
#6
学会查错,
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。
报错空指针
那你就看看哪一个是空,
debug调试停到这一行,你就会发现fops为空,
然后你肯定在想我不是在构造器中实例化该对象了么?
可以你可以在构造器中加一个输出语句看看是否有输出。。。
只有在实例对象的时候才会调用构造器。。。。
#7
根本就没有实例化兄弟。
#8
在构造函数中初始化,但是你又没有new Test5啊?
#9
你的文件名搞错了吧?把代码File file = new File("D:\\MyDoc\\text.txt")
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。
改为File file = new File("D:\\MyDoc\\test.txt")试试。同时应该在前面做一下文件是否存在的判断处理。
#10
要么创建Test5的对象调用它的属性,要么把初始化工作放到静态代码块中
#11
Test5构造器根本没有运行,你的start是static方法.执行时候根本不用创建Test5实例
#12
File file = new File("f:\\javasj\\hanruota.txt");// 我放在F盘了
if (file.exists() && file.isFile()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
String text;
while ((text = input.readLine()) != null)
txt.setText(txt.getText() + text + "\n");
} catch (IOException ioException) {
System.err.println("File Error!");
}
}
这个也许可以帮到你
if (file.exists() && file.isFile()) {
try {
BufferedReader input = new BufferedReader(new FileReader(file));
String text;
while ((text = input.readLine()) != null)
txt.setText(txt.getText() + text + "\n");
} catch (IOException ioException) {
System.err.println("File Error!");
}
}
这个也许可以帮到你
#13
你的方法是静态的,也就是不需要new出类的实例就调用的,没有调用类的构造方法他怎么能够初始化的么
#14
楼主对Java的一些基本概念还需要再复习下,static关键字在class中的作用。
#15
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
构造器中的代码没有执行,main函数中的代码改成new Test5(). start();
#16
没有new Test5 怎么实例化 你的 dops 和 fops
#17
楼主你把start()方法的static去了你就可以发现你的程序有什么bug了。
#18
++
#19
package c_port_packageDoctor;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test5 {
File file = new File("D:\\MyDoc\\text.txt");
static DataOutputStream dops = null;
static FileOutputStream fops = null;
public Test5() {
// TODO Auto-generated constructor stub
try {
fops = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dops = new DataOutputStream(fops);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
start();
}
public static void start(){
try {
fops.write(19); ////在运行该方法之前没有new对象,所以fops为空啊,错误提示中不是说了37行空指针异常么,这种错误用不上调试一看就能看明白。还有就是如果你程序出异常那个对象也是出不来的,也可能为空。自己再好好学习下吧,看你学了半年好像基础还是不是很扎实。多做点小案例这才是最有效的学习方式。
dops.writeInt(19);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
#20
这个怎么没有关闭流呢?
#21
你是想读出还是写入,这个读出流你自己可以关闭的,就是file.flush();file.close();
#22
看到楼主,我放心了!楼主加油
#23
楼主难道是win7系统?
#24
没有实例化类的过程导致你两个对象没有创建对象。你再去使用这两个对象,自然就是空指针咯。
#25
你根本没有实例化test5!
写的这个程序太乱,按照常规的思路和编写方式来写吧。
写的这个程序太乱,按照常规的思路和编写方式来写吧。
#26
try {
// RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
// BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt"));
// DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
// PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));
//设置文本内容
String str="writer in text";
byte[] b=(str).getBytes();
//写入文件,还可以用其他方法如:write(String str)
bw.write(b,0,b.length);
bw.close();
// pw.write(str);
// pw.close();
} catch (IOException ex) {
System.out.println(ex);
}
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧
// RandomAccessFile bw=new RandomAccessFile("F:\\test.txt","rw");
// BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream("F:\\test.txt"));
// DataOutputStream bw=new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
PrintStream bw=new PrintStream(new BufferedOutputStream(new FileOutputStream("F:\\test.txt")));
// PrintWriter pw=new PrintWriter(new BufferedWriter(new FileWriter("F:\\test.txt")));
//设置文本内容
String str="writer in text";
byte[] b=(str).getBytes();
//写入文件,还可以用其他方法如:write(String str)
bw.write(b,0,b.length);
bw.close();
// pw.write(str);
// pw.close();
} catch (IOException ex) {
System.out.println(ex);
}
//这里有几个方法都能实现,注释掉的你也行,自己换着试试吧
#27
不建议看书,建议看看张龙的视频,圣思园的。
#28
没执行你的构造方法啊
#29
我觉得跟IO流没有关系,感觉还是先看下SE的基础知识吧。
#30
Test5()构造方法写的是初始化流,但是你没有调用啊,它肯定会抛出NullPointException
#31
还是同意#29楼的观点,,感觉跟IO没啥关系,强化一下自己的SE基础吧,基础打牢
#32
大家说的都对
#33
面向对象,你操作的哪一行报空指针,你操作的那个对象就是为null。想问楼主是否真的弄懂了面向对象?
#34
从问题的难易程度,看到回答的人的个数,从而推断出大牛的比例
#35
你真的学了半年了,并且知识点都已经掌握了?