十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Exception2
建网站原本是网站策划师、网络程序员、网页设计师等,应用各种网络程序开发技术和网页设计技术配合操作的协同工作。创新互联公司专业提供成都做网站、网站设计,网页设计,网站制作(企业站、成都响应式网站建设公司、电商门户网站)等服务,从网站深度策划、搜索引擎友好度优化到用户体验的提升,我们力求做到极致!
finally
分析:
首先NullPointerException被catch(Exception e1)捕获,打印Exception2,因为有finally,最终还会执行finally中的代码。
注意:
IOException不是运行期异常,方法显示抛出,所以,你的run方法肯定要抛出IOException,否则编译通不过。
这个是数组越界异常,把数组的下标都输出下看看为啥超出数组的范围了。
空指针异常产生的主要原因如下:
(1)当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在
(2)当访问或修改一个对象不存在的字段时会产生异常obj.method() // method方法不存在
(3)字符串变量未初始化;
(4)接口类型的对象没有用具体的类初始化,比如:
List lt;会报错
List lt = new ArrayList();则不会报错了
当一个对象的值为空时,你没有判断为空的情况。你可以试着把下面的代码前加一行代码:
if(rb!=null rb!="")
改成:
if(rb==null);
if(rb!==nullrb!="") 或者if((“”).equals(rb))
空指针的解决办法:
重点关注报错发生的所在行,通过空指针异常产生的两条主要原因诊断具体的错误。同时为了避免空指针的发生,最好在做判断处理时将“null”或者空值放于设定的值之前。
我看了你的程序,帮你改完了,主要改了getMax函数,你看看吧。
完整的程序如下:
public class dd {
public static void main(String[] args) {
OperaNode op = new OperaNode();
op.addToHead(1);
op.addToHead(2);
op.addToHead(3);
op.addToHead(5);
op.printAll();
op.getMax();
}
}
class Node {
public int data;
public Node next;
public Node(){}
public Node(int i) {
data=i;
next=null;
}
public Node(int i, Node n) {
data = i;
next = n;
}
}
//链表类
class OperaNode {
public int max;
public Node head, tail;
public OperaNode() {
head = tail = null;
}
// 判断链表是否为空
public boolean isEntry() {
if (head == null) {
return true;
} else {
return false;
}
}
// 在链表的头部添加数据
public void addToHead(int l) {
head = new Node(l, head);
if (tail == null) {
tail = head;
}
}
public void printAll() {
Node temp;
for (temp = head; temp != null ; temp = temp.next) {
System.out.println(temp.data);
}
}
public void getMax(){
Node temp =null;
Node tmp =head;
for (temp = head; temp != null ; temp = temp.next){
if(tmp.datatemp.data){
tmp.data=temp.data;
}
//head = head.next;
}
System.out.println(tmp.data);
}
}
运行结果:
5
3
2
1
5
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.sql.*;
import java.util.*;
public class TestJTable extends JFrame {
JTable table;
DefaultTableModel model;
VectorString v1 = new VectorString();//需要实例化,估计你那报空的应该就是这里了
Connection conn;
Statement st;
ResultSet rs;
TestJTable() throws NullPointerException {
Container con = getContentPane();//布局panel
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=Teststudent",
"sa", "");
st = conn.createStatement();
rs = st.executeQuery("select * from Sc");
ResultSetMetaData rsmd = rs.getMetaData();
int bb = rsmd.getColumnCount();
System.out.println(bb);
// rs.next();
for (int i = 0; i rsmd.getColumnCount(); i++) {
v1.addElement(rsmd.getColumnName(i + 1));
}
model = new DefaultTableModel(null, v1);
table = new JTable(model);
getInfo();
JScrollPane jp1 = new JScrollPane(table);
con.add(jp1);
setSize(500, 400);
setVisible(true);
rs.close();
st.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
void getInfo() {
model.setRowCount(0);
try {
// rs.beforeFirst();
VectorString v2;
while (rs.next()) {
v2 = new VectorString();//需要在这里进行实例化,否则只能得到同一个vector
for (int i = 1; i = v1.size(); i++) {
v2.addElement(rs.getString(i));
}
//v2填充完毕之后再放入model中,否则会得到column * row行数据,并且只有一列
model.addRow(v2);
}
} catch (Exception e) {
e.printStackTrace();
}
model.fireTableStructureChanged();
}
public static void main(String[] args) {
new TestJTable();
}
}
给你改了几个地方,已经加上注释了,程序运行正常
这个原因是name是子类的成员变量的赋值要在父类构造器结束后,父类构造器中调用test方法,这个时候name还没有被初始化。如果是静态变量就不会报错。
类初始化的具体步骤你可以百度搜一搜,然后写个例子看一看。
父类静态代码块 -- 2.子类静态代码块 --
3.父类成员变量赋默认值 --4.父类非静态代码块 --5.父类构造 --
6.子类成员变量赋默认值 --7.子类非静态代码块 --8.子类构造