❶ java.lang.ClassCastException異常
news=(News)sess.load(News.class, "0001");
問題出在這個語句,先不要強制轉換,看看是什麼對象。
Object obj =sess.load(News.class, "0001");
System.out.println( obj );
看看列印出來的結果是什麼,然後反思一下,看是哪裡出現了問題。
❷ java內存溢出
使用Java程序從資料庫中查詢大量的數據時出現異常:java.lang.OutOfMemoryError: Java heap space
在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。
JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.JVM在啟動的時候會自動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。
例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
如果Heap Size設置偏小,除了這些異常信息外,還會發現程序的響應速度變慢了。GC佔用了更多的時間,而應用分配到的執行時間較少。
Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。
Heap size的 -Xms -Xmn 設置不要超出物理內存的大小。否則會提示「Error occurred ring initialization of VM Could not reserve enough space for object heap」。
這個問題的根源是jvm虛擬機的默認Heap大小是64M,可以通過設置其最大和最小值來實現.設置的方法主要是幾個.
1.可以在windows 更改系統環境變數加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 這行的下面加合適.
3.如果是linux系統
Linux 在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS='-Xms64 -Xmx512'
❸ java異常 救命啊
java.lang.ClassCastException: org.hibernate.lob.SerializableBlob cannot be cast to java.lang.String
從第一句可以知道,這是Hibernate類型轉化的錯誤。
你貼這么少的代碼,誰也救不了你。
不過應該是Hibernate對應資料庫表的映射文件的欄位類型的問題。
❹ JAVA導入向導裡面是空的
首先檢查環境變數是否出現問題。
if obj 等等於null來對所有需要用到的對象來進行檢測,包括函數參數,返回值,以及類實例的成員變數,當你檢測到 null 值時,可以選擇拋出更具針對性的異常類型,如 IllegalArgumentException,並添加消息內容,我們可以使用一些庫函數來簡化代碼。
Java 語言有許多靜態代碼分析工具,如EclipseIDE,SpotBugs,Checker Framework 等,它們可以幫助程序員檢測出編譯期的錯誤,結合 @Nullable 和 @Nonnull 等註解,我們就可以在程序運行之前發現可能拋出空指針異常的代碼。
❺ java有什麼註解前置前攔截
本文將用簡潔的代碼構建一個springboot的攔截器。攔截器的使用很簡單,定義一個自己的攔截器,向配置中添加一下就可以使用。為了方便,之後又引入了註解。
目錄和概述
概述
假設需求:訪問項目的controller是都要進行"token驗證",除了某些像登錄之類的方法。
項目結構:
TokenInterceptor.java 自定義攔截器
InterceptorConfig.java 添加攔截器進入項目
NoNeedToken.java 自定義註解
TestController.java 測試介面
1、自定義攔截器
在 TokenInterceptor.java 中輸入以下代碼,以下的代碼將生成一個在請求到達controller前進行攔截的攔截器
import com.alibaba.fastjson.JSONObject;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
@Component
public class TokenInterceptor implements HandlerInterceptor {undefined
// 假設現在的token有如下數據
List tokenList = Arrays.asList("111", "222", "333");
// 這個方法是在訪問介面之前執行的,我們只需要在這里寫驗證登陸狀態的業務邏輯,就可以在用戶調用指定介面之前驗證登陸狀態了
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {undefined
// 設置返回為json格式,使用UTF-8
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
String token = request.getHeader("token");
PrintWriter out;
// 之後寫你的判斷邏輯:return true是通過攔截器,可以繼續訪問controller,return false是不通過
if (token == null || !tokenList.contains(token)) {undefined
// 如果失敗了返回{state:"false", msg:"token is null or wrong"}
JSONObject res = new JSONObject();
res.put("state","false");
res.put("msg","token is null or wrong");
out = response.getWriter();
out.append(res.toString());
return false;
}
// 否則返回true 進入controller
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {undefined
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {undefined
}
}
————————————————
版權聲明:本文為CSDN博主「魔王別囂張」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_36481714/article/details/114888055
❻ 請教,java源代碼中 Override,Nullable 什麼意思,小弟我從網
@Override 重載
@Nullable 參數可為null
@Nullable是用戶自定義的註解,具體什麼含義還要看情況,一般情況下這種Nullable用來實現null object模式
❼ java.lang.ClassCastException: java.lang.Float
原因很明顯
java.lang.ClassCastException: java.lang.Float
at org.hibernate.type.IntegerType.set(IntegerType.java:41)
本身是Integer的類型,你傳的是float,當然要報錯了
更深層次的原因
查看你的資料庫表項目的類型,查看hibernate配置文件中配置的
這個項目的類型
查看你的數據,為什麼是float
❽ 怎麼用java新建一個資料庫表!用java語言
就是JPA是吧,你要在資料庫里新建一個資料庫,然後在屬性文件里配置連接參數,前期工作做好了,這里我貼出我以前項目代碼給你看,伺服器一運行就會自動創建表的.
//////////////////////////////////////////////////////////////////////////
//
// Copyright 2010 Ningbo Safe Software Co.Ltd, All Right reserved.
//
//////////////////////////////////////////////////////////////////////////
package cn.credit.bean.information.cases;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
//************************************************************************
/**
* 系統名 : 信用物流系統平台 模塊名 : 資訊系統 功能名 : 成功案例
*
* @author meiwx
* @version 1.0 Aug 13, 2010 作成
*
*/
// ************************************************************************
@Entity
@Table(name = "TAB_CASES")
public class Cases implements Serializable {
private static final long serialVersionUID = 1L;
/* 審核員 */
private String assessor;
/* 狀態 */
private String status;
/* 編碼 */
private String id;
/* 標題 */
private String title;
/* 內容 */
private String content;
/* 分類 */
private String sort;
/* 作者 */
private String author;
/* 刪除區分 */
private char del_flg;
/* 登錄時間 */
private Date insert_time;
/* 更新時間 */
private Date update_time;
/* 錄入員 */
private String update_user;
/* 發布時間 */
private Date issue_time;
/**
*
*
* @return
*/
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "ISSUE_TIME", length = 20)
public Date getIssue_time() {
return issue_time;
}
public void setIssue_time(Date issue_time) {
this.issue_time = issue_time;
}
/**
*
* @return String
*/
@Id
@Column(name = "ID", length = 10, nullable = false)
public String getId() {
return id;
}
/**
*
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
*
* @return
*/
@Column(name = "STATUS", length = 1, nullable = false)
public String getStatus() {
return status;
}
/**
*
* @return
*/
@Column(name = "TITLE", length = 20)
public String getTitle() {
return title;
}
/**
*
* @param title
*/
public void setTitle(String title) {
this.title = title;
}
/**
*
* @return
*/
@Column(name = "CONTENT", length = 21000)
public String getContent() {
return content;
}
/**
*
* @param content
*/
public void setContent(String content) {
this.content = content;
}
/**
*
* @return
*/
@Column(name = "SORT", nullable = false, length = 1)
public String getSort() {
return sort;
}
/**
*
* @param sort
*/
public void setSort(String sort) {
this.sort = sort;
}
/**
*
* @return String
*/
@Column(name = "AUTHOR", length = 10)
public String getAuthor() {
return author;
}
/**
*
*/
@Column(name = "ASSESSOR")
public String getAssessor() {
return assessor;
}
public void setAssessor(String assessor) {
this.assessor = assessor;
}
public void setStatus(String status) {
this.status = status;
}
/**
*
* @param author
*/
public void setAuthor(String author) {
this.author = author;
}
/**
*
* @return
*/
@Column(name = "DEL_FLG", length = 1)
public char getDel_flg() {
return del_flg;
}
public void setDel_flg(char del_flg) {
this.del_flg = del_flg;
}
/**
*
* @return
*/
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "INSERT_TIME", nullable = false)
public Date getInsert_time() {
return insert_time;
}
/**
*
* @param insert_time
*/
public void setInsert_time(Date insert_time) {
this.insert_time = insert_time;
}
/**
*
* @return
*/
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDATE_TIME", nullable = false)
public Date getUpdate_time() {
return update_time;
}
/**
*
* @param update_time
*/
public void setUpdate_time(Date update_time) {
this.update_time = update_time;
}
@Column(name = "UPDATE_USER", nullable = false)
public String getUpdate_user() {
return update_user;
}
public void setUpdate_user(String update_user) {
this.update_user = update_user;
}
}
❾ java中的空指針異常怎麼解決
原文:https://www.hu.com/question
你這個問題的解決
問題定位:
在堆棧異常信息的第一行就可以定位到是哪裡出了空指針,倘若這里不是你寫的類,可以往下翻一下,找到你寫的類,就是這里出現的空指針。
問題解決:
對一個空對象調用裡面的方法或者屬性的時候會報空指針,檢查這個對象為什麼是空即可。
Java 空指針異常的若干解決方案
Java 中任何對象都有可能為空,當我們調用空對象的方法時就會拋出 NullPointerException 空指針異常,這是一種非常常見的錯誤類型。我們可以使用若干種方法來避免產生這類異常,使得我們的代碼更為健壯。本文將列舉這些解決方案,包括傳統的空值檢測、編程規范、以及使用現代 Java 語言引入的各類工具來作為輔助。
運行時檢測
最顯而易見的方法就是使用 if (obj == null) 來對所有需要用到的對象來進行檢測,包括函數參數、返回值、以及類實例的成員變數。當你檢測到 null 值時,可以選擇拋出更具針對性的異常類型,如 IllegalArgumentException,並添加消息內容。我們可以使用一些庫函數來簡化代碼,如 Java 7 開始提供的 Objects#requireNonNull 方法:
public void testObjects(Object arg) {
Object checked = Objects.requireNonNull(arg, "arg must not be null");
checked.toString();}
Guava 的 Preconditions 類中也提供了一系列用於檢測參數合法性的工具函數,其中就包含空值檢測:
public void testGuava(Object arg) {
Object checked = Preconditions.checkNotNull(arg, "%s must not be null", "arg");
checked.toString();
}
我們還可以使用 Lombok 來生成空值檢測代碼,並拋出帶有提示信息的空指針異常:
public void testLombok(@NonNull Object arg) {
arg.toString();
生成的代碼如下:
public void testLombokGenerated(Object arg) {
if (arg == null) {
throw new NullPointerException("arg is marked @NonNull but is null");
}
arg.toString();
}
這個註解還可以用在類實例的成員變數上,所有的賦值操作會自動進行空值檢測。
編程規范
·通過遵守某些編程規范,也可以從一定程度上減少空指針異常的發生。
使用那些已經對 null 值做過判斷的方法,如 String#equals、String#valueOf、以及三方庫中用來判斷字元串和集合是否為空的函數:
if (str != null && str.equals("text")) {}
if ("text".equals(str)) {}
if (obj != null) { obj.toString(); }
String.valueOf(obj); // "null"
// from spring-core
StringUtils.isEmpty(str);
CollectionUtils.isEmpty(col);
// from guava
Strings.isNullOrEmpty(str);
// from commons-collections4
CollectionUtils.isEmpty(col);
·如果函數的某個參數可以接收 null 值,考慮改寫成兩個函數,使用不同的函數簽名,這樣就可以強制要求每個參數都不為空了:
public void methodA(Object arg1) {
methodB(arg1, new Object[0]);
}
public void methodB(Object arg1, Object[] arg2) {
for (Object obj : arg2) {} // no null check
}
·如果函數的返回值是集合類型,當結果為空時,不要返回 null 值,而是返回一個空的集合;如果返回值類型是對象,則可以選擇拋出異常。Spring JdbcTemplate 正是使用了這種處理方式:
// 當查詢結果為空時,返回 new ArrayList<>()
jdbcTemplate.queryForList("SELECT * FROM person");
// 若找不到該條記錄,則拋出
jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class);
// 支持泛型集合
public <T> List<T> testReturnCollection() {
return Collections.emptyList();
}
靜態代碼分析
Java 語言有許多靜態代碼分析工具,如 Eclipse IDE、SpotBugs、Checker Framework 等,它們可以幫助程序員檢測出編譯期的錯誤。結合 @Nullable 和 @Nonnull 等註解,我們就可以在程序運行之前發現可能拋出空指針異常的代碼。
但是,空值檢測註解還沒有得到標准化。雖然 2006 年 9 月社區提出了 JSR 305 規范,但它長期處於擱置狀態。很多第三方庫提供了類似的註解,且得到了不同工具的支持,其中使用較多的有:
javax.annotation.Nonnull:由 JSR 305 提出,其參考實現為 com.google.code.findbugs.jsr305;
org.eclipse.jdt.annotation.NonNull:Eclipse IDE 原生支持的空值檢測註解;
e.umd.cs.findbugs.annotations.NonNull:SpotBugs 使用的註解,基於 findbugs.jsr305;
org.springframework.lang.NonNull:Spring Framework 5.0 開始提供;
org.checkerframework.checker.nullness.qual.NonNull:Checker Framework 使用;
android.support.annotation.NonNull:集成在安卓開發工具中;
我建議使用一種跨 IDE 的解決方案,如 SpotBugs 或 Checker Framework,它們都能和 Maven 結合得很好。
SpotBugs 與 @NonNull、@CheckForNull
SpotBugs 是 FindBugs 的後繼者。通過在方法的參數和返回值上添加 @NonNull 和 @CheckForNull 註解,SpotBugs 可以幫助我們進行編譯期的空值檢測。需要注意的是,SpotBugs 不支持 @Nullable 註解,必須用 @CheckForNull 代替。如官方文檔中所說,僅當需要覆蓋 @ParametersAreNonnullByDefault 時才會用到 @Nullable。
官方文檔 中說明了如何將 SpotBugs 應用到 Maven 和 Eclipse 中去。我們還需要將 spotbugs-annotations 加入到項目依賴中,以便使用對應的註解。
以下是對不同使用場景的說明:
對於 Eclipse 用戶,還可以使用 IDE 內置的空值檢測工具,只需將默認的註解 org.eclipse.jdt.annotation.Nullable 替換為 SpotBugs 的註解即可:
Checker Framework 與 @NonNull、@Nullable
Checker Framework 能夠作為 javac 編譯器的插件運行,對代碼中的數據類型進行檢測,預防各類問題。我們可以參照 官方文檔,將 Checker Framework 與 maven-compiler-plugin 結合,之後每次執行 mvn compile 時就會進行檢查。Checker Framework 的空值檢測程序支持幾乎所有的註解,包括 JSR 305、Eclipse、甚至 lombok.NonNull。
Checker Framework 默認會將 @NonNull 應用到所有的函數參數和返回值上,因此,即使不添加這個註解,以下程序也是無法編譯通過的:
Checker Framework 對使用 Spring Framework 5.0 以上的用戶非常有用,因為 Spring 提供了內置的空值檢測註解,且能夠被 Checker Framework 支持。一方面我們無需再引入額外的 Jar 包,更重要的是 Spring Framework 代碼本身就使用了這些註解,這樣我們在調用它的 API 時就能有效地處理空值了。舉例來說,StringUtils 類里可以傳入空值的函數、以及會返回空值的函數都添加了 @Nullable 註解,而未添加的方法則繼承了整個框架的 @NonNull 註解,因此,下列代碼中的空指針異常就可以被 Checker Framework 檢測到了:
Optional 類型
Java 8 引入了 Optional<T> 類型,我們可以用它來對函數的返回值進行包裝。這種方式的優點是可以明確定義該方法是有可能返回空值的,因此調用方必須做好相應處理,這樣也就不會引發空指針異常。但是,也不可避免地需要編寫更多代碼,而且會產生很多垃圾對象,增加 GC 的壓力,因此在使用時需要酌情考慮。
方法的鏈式調用很容易引發空指針異常,但如果返回值都用 Optional 包裝起來,就可以用 flatMap 方法來實現安全的鏈式調用了:
Java 8 Stream API 同樣使用了 Optional 作為返回類型:
此外,Java 8 還針對基礎類型提供了單獨的 Optional 類,如 OptionalInt、OptionalDouble 等,在性能要求比較高的場景下很適用。
其它 JVM 語言中的空指針異常
Scala 語言中的 Option 類可以對標 Java 8 的 Optional。它有兩個子類型,Some 表示有值,None 表示空。
除了使用 Option#isEmpty 判斷,還可以使用 Scala 的模式匹配:
Scala 的集合處理函數庫非常強大,Option 則可直接作為集合進行操作,如 filer、map、以及列表解析(for-comprehension):
Kotlin 使用了另一種方式,用戶在定義變數時就需要明確區分 可空和不可空類型。當可空類型被使用時,就必須進行空值檢測。
Kotlin 的特性之一是與 Java 的可互操作性,但 Kotlin 編譯器無法知曉 Java 類型是否為空,這就需要在 Java 代碼中使用註解了,而 Kotlin 支持的 註解 也非常廣泛。Spring Framework 5.0 起原生支持 Kotlin,其空值檢測也是通過註解進行的,使得 Kotlin 可以安全地調用 Spring Framework 的所有 API。
結論
在以上這些方案中,我比較推薦使用註解來預防空指針異常,因為這種方式十分有效,對代碼的侵入性也較小。所有的公共 API 都應該使用 @Nullable 和 @NonNull 進行註解,這樣就能強制調用方對空指針異常進行預防,讓我們的程序更為健壯。
❿ grails中blank和nullable的區別
聲明約束屬性時,blank和nullable好像都能限制非空,那麼下面兩個語句的區別在哪裡:
name(blank:false)
dateOfBirth(nullable:false)
一:
blank用於約束String數據,nullable用於約束對象
name是String類型,所以用blank,dateOfBirth聲明時用的是new Date(),因此用nullable
二:
不贊同4樓的回復。我給你舉個例子:
String name1
String name2
String name3
String name4
static constraints =
{
name1(nullable:false,blank:false)
name2(nullable:false,blank:true)
name3(nullable:true,blank:false)
name4(nullable:true,blank:true)
}
映射到資料庫的DDL語句為:
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`version` bigint(20) NOT NULL,
`name1` varchar(255) NOT NULL,
`name2` varchar(255) NOT NULL,
`name3` varchar(255) DEFAULT NULL,
`name4` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
而且此時頁面校驗要求只有name1是必填的。
如果還不能理解,附帶這兩個sql,看下效果:
select * from test where name3 = '';
select * from test where name3 is null;