关于java的npe的信息
今天给各位分享java的npe的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java数组里可以存NULL值吗 取出时会报空指针吗
- 2、java用ireport 打印报表,求助大神
- 3、如何更好地使用Java 8的Optional
- 4、Java的异常中什么是”被检查的异常“,什么是”不被检查的异常“?被检查是怎样检查的?
- 5、Exception in thread "main" java.lang.NullPointerException是什么意思
java数组里可以存NULL值吗 取出时会报空指针吗
可以存NULL值,单纯取出来不用不会报NPE错误,但是如果你取出来用的话就会报NPE
java用ireport 打印报表,求助大神
将需要批量打印的内容生成的结果集传递给报表模板就可以了,会自动批量打印。
不预览循环批量打印要怎样实现?
需要调用打印接口 JasperPrintManager类可以直接实现打印。具体资料你可以参考Api
我用的是printReport 方法。
主要就是先在服务器端生成JasperPrint对象,返回给客户端。
下面代码百度到的,你可以参考。
import java.io.File;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameNotFoundException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.lowagie.text.ExceptionConverter;
import com.sofn.struts.dto.UserInfoDTO;
import com.sofn.struts.op.UserInfo;
import com.sofn.util.UserSessionOperate;
public class ReportViewAction extends Action {
(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response)
throws Exception {
//已编译文件路径和格式
String fp =this.getServlet().getServletContext().getRealPath("/")+ "report\\jasper\\"+ request.getAttribute("rdoc")+ ".jasper";
File reportFile = new File(fp);
// System.out.println("报表路径!!!!!!!"+reportFile);
Map parameters = (Map) request.getAttribute("paras");
byte[] bytes = null;
List list = new ArrayList();
DataSource ds = null;
JasperPrint jasperPrint=null;
//参数传递
UserSessionOperate uso = new UserSessionOperate();
String user = uso.getUser(request);
UserInfo eidr = new UserInfo();
UserInfoDTO eidrdto = null;
String deptname = "物流部门";
String username = "陈云刚";
parameters.put("marker", username);
parameters.put("bumen", deptname);
//数据库连接
try {
String source = "java:comp/env/jdbc/posuse";
Context ic = null;
if (ic == null)
ic = new InitialContext();
ds = (DataSource) ic.lookup(source);
if (ds == null) {
System.out.println("Reportview----22222!");
}
} catch (NameNotFoundException nfe) {
nfe.toString());
} catch (Exception ne) {
ne.printStackTrace();
}
//使用数据源
if (request.getAttribute("datasource") != null) {
list = (List) request.getAttribute("reportlist");
JRBeanCollectionDataSource jds =new JRBeanCollectionDataSource(list); //使用数据源
}
//使用SQL查询
try {
jasperPrint =JasperFillManager.fillReport(reportFile.getPath(),parameters,ds.getConnection());//填充报表数据生成JasperPrint对象
JasperPrintManager.printReport(jasperPrint, false);//2008-08-25 直接打印,不用预览PDF直接打印 true为弹出打印机选择.false为直接打印.
} catch (JRException jre) {
//System.out.println("Reportview----JRException88888");
jre.printStackTrace();
} catch (ExceptionConverter ec) {
ec.getLocalizedMessage());
ec.printStackTrace();
} catch (NullPointerException npe) {
npe.getLocalizedMessage());
npe.getMessage());
npe.toString());
System.err);
} catch (Exception ee) {
ee.printStackTrace();
}
//输出
response.setContentType("application/octet-stream");
ServletOutputStream ouputStream = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(ouputStream);
oos.writeObject(jasperPrint);//将JasperPrint对象写入对象输出流中
oos.flush();
oos.close();
ouputStream.flush();
ouputStream.close();
return mapping.findForward("view"); //转向
}
}
如何更好地使用Java 8的Optional
Java 8中的OptionalT是一个可以包含或不可以包含非空值的容器对象,在 Stream API中很多地方也都使用到了Optional。
java中非常讨厌的一点就是nullpoint,碰到空指针就会出错抛Exception,然后需要逐行检查是哪个对象为空,带来大量的不必要精力损耗,抛出NPE错误不是用户操作的错误,而是开发人员的错误,应该被避免,那么只能在每个方法中加入非空检查,阅读性和维护性都比较差。
如下面这个代码的手工非空检查:
public void addAddressToCustomer(Customer customer, Address newAddress){ if ( customer == null || newAddress == null) return; if ( customer.getAddresses() == null ){ customer.setAddresses ( new ArrayList()); } customer.addAddress(newAddress);}
另外还有一些开发人员喜欢通过非空检查来实现业务逻辑,空对象不应该用来决定系统的行为,它们是意外的Exceptional值,应当被看成是错误,而不是业务逻辑状态。
当我们一个方法返回List集合时,应该总是返回一个空的List,而不是Null,这就允许调用者能够遍历它而不必检查Null,否则就抛出NPE。
但是如果我们根据标识键ID查询数据库,没有查到,需要返回一个空对象怎么办?有人建议抛出Exception,其实这不符合函数方法一进一出的原则,变成一个函数方法有两个返回,一个是正常返回,一个出错Exception,函数式编程范式告诫我们不要轻易抛Exception。
这时Java 8的Optional就发挥作用了,允许我们返回一个空的对象。
OptionalT有方法 isPresent() 和 get() 是用来检查其包含的对象是否为空或不是,然后返回它,如:
OptionalSomeType someValue = someMethod();
if (someValue.isPresent()) { // check
someValue.get().someOtherMethod(); // retrieve and call
}
但是这种用法并不能体现Java 8的全部好处,你可以将Optional看成是需要使用某个T值的方法之间某种中间人或者协调者Mediator,而不只是一个普通对象的包装器。
如果你有一个值返回类型T,你有一个方法需要使用这个值,那么你可以让 OptionalT 处于中间,确保它们之间交互进行,而不必要人工干预。
这样,协调者OptionalT能够照顾T的值提供给你的方法作为输入参数,在这种情况下,如果T是空,可以确保不会出错,这样在T值为空时也可以让一切都正常运作,你也可以让OptionalT执行其他动作,如执行一段代码块等等,这样它就实际上是语言机制的很好的补充。
下面这个案例涉及到Lambda表达式 方法引用,是将单词流中第一个以"L"开始单词取出,作为返回结果是一个OptionalString。
使用ifPresent()
这个案例的代码如下:
Streamstring names = Stream.of("Lamurudu", "Okanbi", "Oduduwa");
Optionalstring longest = names
.filter(name - name.startsWith("L"))
.findFirst();
longest.ifPresent(name - {
String s = name.toUpperCase();
System.out.println("The longest name is "+ s);
});
这里ifPresent() 是将一个Lambda表达式作为输入,T值如果不为空将传入这个lambda。那么这个lambda将不为空的单词转为大写输出显示。在前面names单词流寻找结果中,有可能找不到开始字母为L的单词,返回为空,也可能找到不为空,这两种情况都传入lambda中,无需我们打开盒子自己编写代码来判断,它自动帮助我们完成了,无需人工干预。
使用map()
如果你想从OptionalT中返回一个值怎么办?使用 map(),如下:
Streamstring names = Stream.of("Lamurudu", "Okanbi", "Oduduwa");
Optionalstring longest = names
.filter(name - name.startsWith("L"))
.findFirst();
Optionalstring lNameInCaps = longest.map(String::toUpperCase);
使用OptionalT的map方法能够返回另外一个Optional,如上面的 LnameInCaps,因为传入map()的参数值也许会导致一个空值。
使用orElse()
如果在T可能空时你需要一个值的话,那么可以使用 orElse(),它能在T值存在的情况下返回这个值,否则返回输入值。
StreamString names = Stream.of("Lamurudu", "Okanbi", "Oduduwa");
OptionalString longest = names
.filter(name - name.startsWith("Q"))
.findFirst();
String alternate = longest.orElse("Nimrod");
System.out.println(alternate); //prints out "Nimrod"
使用orElseGet()
orElseGet() 方法类似于orElse(),但是不是直接返回输入参数,而是调用输入参数,返回调用的结果,这个输入参数通常是lambda:
StreamString names = Stream.of("Lamurudu", "Okanbi", "Oduduwa");
OptionalString longest = names
.filter(name - name.startsWith("Q"))
.findFirst();
String alternate = longest.orElseGet(() - {
// perform some interesting code operation
// then return the alternate value.
return "Nimrod";
});
System.out.println(alternate);
使用 orElseThrow()
orElseThrow()是在当遭遇Null时,决定抛出哪个Exception时使用:
StreamString names = Stream.of("Lamurudu", "Okanbi", "Oduduwa");
OptionalString longest = names
.filter(name - name.startsWith("Q"))
.findFirst();
longest.orElseThrow(NoSuchElementStartingWithQException::new);
总结,你能创建下面三种类型的OptionalT:
OptionalSomeType getSomeValue() {
// 返回一个空的Optional类型;
return Optional.empty();
}
OptionalSomeType getSomeValue() {
SomeType value = ...;
// 使用这个方法,值不可以为空,否则抛exception
return Optional.of(value);
}
OptionalSomeType getSomeValue() {
SomeType value = ...;
// 使用这个方法,值可以为空,如果为空返回Optional.empty
return Optional.ofNullable(value);
// usage
OptionalSomeType someType = getSomeValue();
Java的异常中什么是”被检查的异常“,什么是”不被检查的异常“?被检查是怎样检查的?
Java中异常分为2种情况One:已检查异常(编译异常)Two:未检查异常(RunIng异常)检查时异常指的是在编译期间Java的编译器对代码的一种检测比如 int i;System.out.println(i+2);在编译期就过不去,Java对变量的使用必须初始化为检查异常就比较多了数组越界,类型转换错误,空指针........在程序跑起来之后才晓得
Exception in thread "main" java.lang.NullPointerException是什么意思
1、NullPointerException是java应用程序中最常见的一种异常,空指针异常
2、空指针异常是一种运行时异常,发生在调用对象的方法或者属性的时候。
3、当对象为null时,调用其任何方法均会报NullPointerException
4、最好的解决办法是在调用一个对象或者集合类时,先判断当前对象是否为null,为null进入其他的业务处理流程。
示例:
ListString list = null;
if(list !=null){
。。。。。
}
java的npe的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java的npe的信息别忘了在本站进行查找喔。
发布于:2022-12-08,除非注明,否则均为
原创文章,转载请注明出处。