关于java的npe的信息

博主:adminadmin 2022-12-08 03:06:06 63

今天给各位分享java的npe的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-08,除非注明,否则均为首码项目网原创文章,转载请注明出处。