精华内容
下载资源
问答
  • java.lang.NullPointerException出现的几种原因以及解决

    万次阅读 多人点赞 2019-07-03 21:18:40
    java.lang.NullPointerException出现的几种原因: 1、字符串变量未初始化 2、接口类型的对象没有用具体的类初始化,比如: Map map // 会报错 Map map = new Map(); //则不会报错了 3、当一个对象的值为空时,...

    java.lang.NullPointerException出现的几种原因:

    1、字符串变量未初始化
    2、接口类型的对象没有用具体的类初始化,比如:
    Map map // 会报错
    Map map = new Map(); //则不会报错了
    3、当一个对象的值为空时,你没有判断为空的情况。
    4、字符串与文字的比较,文字可以是一个字符串或Enum的元素,如下会出现异常
    String str = null;
    if(str.equals(“Test”)){
    //这里的代码将不会被触发,因为会抛出java.lang.NullPointerException异常。
    }
    5、优先使用String.valueOf()方法代替toString()
    当程序代码需要对象的字符串表示形式时,请避免使用该对象的toString方法。如果你的对象的引用等于null,NullPointerException则会抛出,使用静态String.valueOf方法,该方法不会抛出任何异常并打印"null"
    6、class被声明了类型, 默认 class = null; 这样在调用class中方法的时候系统只能给你个空指针异常, 给其实例化就好了:class = new Class();
    7、返回null,方法的返回值不要定义成为一般的类型,而是用数组。这样如果想要返回null的时候就能避免许多不必要的NullPointerException

    在这里插入图片描述
    总之,NullPointerException由RuntimeException派生出来,是一个运行时异常。其意指可能会在运行的时候才会被抛出,一个变量是null,及只有其名,没有实值内容,也没分配内存,当你要去取他的长度,对他进行操作就会出现NullPointException,所以声明变量时最好给它分配好内存空间,给予赋值,例如拿该变量与一个值比较时,要么先做好该异常的处理要么给它进行判断先: if (str !=null && str “”){ …}
    判断一个String的实例s是否等于“a”时,不要写成s.equals(“a”),这样容易抛NullPointerException,而写成"a".equals(s)就可以避免这个问题,不过对变量先进行判空后再进行操作更好,尽量避免返回null,方法的返回值不要定义成为一般的类型,用数组。这样如果想要返回null的时候,就返回一个没有元素的数组。就能避免许多不必要的NullPointerException

    下图为异常分布图:
    在这里插入图片描述

    展开全文
  • java.lang.OutOfMemoryError:GC overhead limit exceeded

    万次阅读 多人点赞 2017-09-11 16:36:20
    简单来说,java.lang.OutOfMemoryError: GC overhead limit exceeded发生的原因是,当前已经没有可用内存,经过多次GC之后仍然没能有效释放内存。

    java.lang.OutOfMemoryError这个错误是比较经典的错误了,经过JDK不断的迭代,服务器硬件的不断升级。。。总之,社会在发展,时代在进步。很多错误已经消失在时代的浪潮中。我也是很久没有见过这个错误了,以至于都以为在Java的世界中不会再碰到这个错误。结果,就在最疏忽的时候碰到了TA,真是,心中一万只神兽奔袭而过,狠狠的践踏了我这颗上了年纪的心脏啊。

    吐槽完毕,言归正传。

    Java刚刚出现的年代,有一个相比于其他语言的优势就是,内存回收机制。不需要明确的调用释放内存的API,java就自动完成,这个过程就是Garbage Collection,简称GC。这对以懒著称的程序猿们来说,绝对是重大利好。但是,凡事有利必有弊,可以肯定的是,Java语言是人创造的,GC也是人编写的代码,绝对不是机器自动完成的。也就是说,GC的过程是另外一群程序猿根据可能出现的情况,预设了GC条件,把符合回收条件的内存空间释放出来。一旦被占用的内存空间不符合释放的条件,GC没办法清理,那就会适时出现java.lang.OutOfMemoryError。这个错误就是提醒我们这群程序猿,写GC程序的程序猿不知道这种情况怎么处理,为了安全也不便处理,谁使用Java就自己看着解决吧。

    说起来,java.lang.OutOfMemoryError有几种分类的,这次碰到的是java.lang.OutOfMemoryError: GC overhead limit exceeded,下面就来说说这种类型的内存溢出。

    简单来说,java.lang.OutOfMemoryError: GC overhead limit exceeded发生的原因是,当前已经没有可用内存,经过多次GC之后仍然没能有效释放内存。

    1. 原因

    众所周知,JVM的GC过程会因为STW,只不过停顿短到不容易感知。当引起停顿时间的98%都是在进行GC,但是结果只能得到小于2%的堆内存恢复时,就会抛出java.lang.OutOfMemoryError: GC overhead limit exceeded这个错误。Plumbr给出一个示意图:

    java.lang.OutOfMemoryError: GC overhead limit exceeded

    这个错误其实就是空闲内存与GC之间平衡的一个限制,当经过几次GC之后,只有少于2%的内存被释放,也就是很少的空闲内存,可能会再次被快速填充,这样就会触发再一次的GC。这就是一个恶性循环了,CPU大部分的时间在做GC操作,没有时间做具体的业务操作,可能几毫秒的任务需要几分钟都无法完成,整个应用程序就形同虚设了。

    2. 示例

    Plumbr上找的一个例子,这里直接给出。

    class Wrapper {
      public static void main(String args[]) throws Exception {
        Map map = System.getProperties();
        Random r = new Random();
        while (true) {
          map.put(r.nextInt(), "value");
        }
      }
    }
    

    然后设定堆内存是100m,比如java -Xmx100m -XX:+UseParallelGC Wrapper。不同的系统环境可能需要设置不同的堆内存大小,否则会产生不同的OOM错误。其实也算是好理解,因为java.lang.OutOfMemoryError: GC overhead limit exceeded需要有两个条件:98%的时间和2%的内存。如果这两个条件有一个没有达到,结果Map对象扩容,那就可能出现java.lang.OutOfMemoryError: Java heap space这个错误。

    3. 解决方法

    3.1 JVM参数

    JVM给出一个参数避免这个错误:-XX:-UseGCOverheadLimit

    但是,这个参数并不是解决了内存不足的问题,只是将错误发生时间延后,并且替换成java.lang.OutOfMemoryError: Java heap space

    3.2 堆内存

    还有一个偷懒的方法是:增大堆内存。既然堆内存少了,那就增加堆内存即可。

    但是,这个方法也不是万能的。因为程序里可能有内存泄露。这个时候即使再增大堆内存,也会有用完的时候。

    所以前两个方法都只是治标不治本而已。

    3.3 终极方法

    其实还是有一个终极方法的,而且是治标治本的方法,就是找到占用内存大的地方,把代码优化了,就不会出现这个问题了。

    怎么找到需要优化的代码呢?就是通过heap dump生产jvm快照,通过分析快照找到占用内存大的对象,从而找到代码位置。

    通过设置-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump参数来生产快照,然后通过VisualVM或者MAT等工具分析快照内容进行定位。通过这个参数是将发生OOM时的堆内存所有信息写入快照文件,也就是说,如果此时堆内存中有敏感信息的话,那就可能造成信息泄漏了。


    个人主页: http://www.howardliu.cn

    个人博文: java.lang.OutOfMemoryError:GC overhead limit exceeded

    CSDN主页: http://blog.csdn.net/liuxinghao

    CSDN博文: java.lang.OutOfMemoryError:GC overhead limit exceeded

    展开全文
  • java.lang.UnsupportedOperationException解决方法

    万次阅读 多人点赞 2018-11-03 17:00:09
    在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下。 代码块: public class ListTest { public static void...

    在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下。 
    代码块:

    public class ListTest {
        public static void main(String[] args) {
            String[] array = {"1","2","3","4","5"};
            List<String> list = Arrays.asList(array);
            list.add("6");
        }
    }

    执行结果:

    Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.AbstractList.add(AbstractList.java:148)
        at java.util.AbstractList.add(AbstractList.java:108)
        at com.atguigu.test.ListTest.main(ListTest.java:11)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

    发生问题的原因如下: 
    调用Arrays.asList()生产的List的add、remove方法时报异常,这是由Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新,所以会抛出异常。解决方法如下:

    public class ListTest {
        public static void main(String[] args) {
            String[] array = {"1","2","3","4","5"};
            List<String> list = Arrays.asList(array);
            List arrList = new ArrayList(list);
            arrList.add("6");
        }
    }

     


    Arrays源码:

       public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);
        }
    
        /**
         * @serial include
         */
        private static class ArrayList<E> extends AbstractList<E>
            implements RandomAccess, java.io.Serializable
        {
            private static final long serialVersionUID = -2764017481108945198L;
            private final E[] a;
    
            ArrayList(E[] array) {
                a = Objects.requireNonNull(array);
            }
    
            @Override
            public int size() {
                return a.length;
            }
    
            @Override
            public Object[] toArray() {
                return a.clone();
            }
    
            @Override
            @SuppressWarnings("unchecked")
            public <T> T[] toArray(T[] a) {
                int size = size();
                if (a.length < size)
                    return Arrays.copyOf(this.a, size,
                                         (Class<? extends T[]>) a.getClass());
                System.arraycopy(this.a, 0, a, 0, size);
                if (a.length > size)
                    a[size] = null;
                return a;
            }
    
            @Override
            public E get(int index) {
                return a[index];
            }
    
            @Override
            public E set(int index, E element) {
                E oldValue = a[index];
                a[index] = element;
                return oldValue;
            }
    
            @Override
            public int indexOf(Object o) {
                E[] a = this.a;
                if (o == null) {
                    for (int i = 0; i < a.length; i++)
                        if (a[i] == null)
                            return i;
                } else {
                    for (int i = 0; i < a.length; i++)
                        if (o.equals(a[i]))
                            return i;
                }
                return -1;
            }
    
            @Override
            public boolean contains(Object o) {
                return indexOf(o) != -1;
            }
    
            @Override
            public Spliterator<E> spliterator() {
                return Spliterators.spliterator(a, Spliterator.ORDERED);
            }
    
            @Override
            public void forEach(Consumer<? super E> action) {
                Objects.requireNonNull(action);
                for (E e : a) {
                    action.accept(e);
                }
            }
    
            @Override
            public void replaceAll(UnaryOperator<E> operator) {
                Objects.requireNonNull(operator);
                E[] a = this.a;
                for (int i = 0; i < a.length; i++) {
                    a[i] = operator.apply(a[i]);
                }
            }
    
            @Override
            public void sort(Comparator<? super E> c) {
                Arrays.sort(a, c);
            }
        }
    AbstractList源码:
    
     /**
         * {@inheritDoc}
         *
         * <p>This implementation always throws an
         * {@code UnsupportedOperationException}.
         *
         * @throws UnsupportedOperationException {@inheritDoc}
         * @throws ClassCastException            {@inheritDoc}
         * @throws NullPointerException          {@inheritDoc}
         * @throws IllegalArgumentException      {@inheritDoc}
         * @throws IndexOutOfBoundsException     {@inheritDoc}
         */
        public void add(int index, E element) {
            throw new UnsupportedOperationException();
        }
    

    码字不易,如果看懂了,期待五连点赞⬇⬇⬇⬇⬇

    展开全文
  • 最近在Linux上的eclipse中运行java程序出现了这样的错误,弄了很久用了以下三种方法终后终于成功运行了,分享下,希望能帮助到... java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configurat...

    欢迎各位关注我的个人微信公众号:赶令,将会定期更新大数据相关知识及个人心得

    最近在Linux上的eclipse中运行java程序出现了这样的错误,弄了很久用了以下三种方法终后终于成功运行了,分享下,希望能帮助到大家。
    Linux运行java程序提示错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration
    	at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<init>(DefaultMetricsSystem.java:38)
    	at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.<clinit>(DefaultMetricsSystem.java:36)
    	at org.apache.hadoop.security.UserGroupInformation$UgiMetrics.create(UserGroupInformation.java:136)
    	at org.apache.hadoop.security.UserGroupInformation.<clinit>(UserGroupInformation.java:256)
    	at org.apache.hadoop.mapreduce.task.JobContextImpl.<init>(JobContextImpl.java:72)
    	at org.apache.hadoop.mapreduce.Job.<init>(Job.java:145)
    	at org.apache.hadoop.mapreduce.Job.getInstance(Job.java:188)
    	at org.apache.hadoop.mapreduce.Job.getInstance(Job.java:207)
    	at com.hpsk.bigdata.offline.analystics.etl.ETLTestDriver.run(ETLTestDriver.java:49)
    	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
    	at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
    	at com.hpsk.bigdata.offline.analystics.etl.ETLTestDriver.main(ETLTestDriver.java:158)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.configuration.Configuration
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	... 12 more
    

    eclipse上运行java程序提示 Exception in thread “main” java.lang.NoClassDefFoundError

    • 错误原因
    1. 可能程序中导错包了,解决:到程序中找到对应的方法的包进行更改
    2. 可能没有这个jar包,解决:选中项目->右击->run as->maven clean,清空缓存,再选中项目->右击->run as->maven build…
    3. 如果有这个jar包报错,可能是因为jar包不全,缺少某些依赖或其他的,解决:找到jar包目录进行删除,重新下载,
    • 第二种情况:
      先可以在maven中update试下:选中项目->右击->maven->Update Project

    这里写图片描述

    如果update还不行再进行clean后build

    这里写图片描述

    这里写图片描述

    第三种情况:
    如果在build中出现类似于这样的提示:

    [ERROR] error reading /home/rdedu1/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar; error in opening zip file
    [ERROR] error reading /home/rdedu1/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar; error in opening zip file
    [ERROR] error reading /home/rdedu1/.m2/repository/commons-beanutils/commons-beanutils-core/1.8.0/commons-beanutils-core-1.8.0.jar; error in opening zip file
    [ERROR] error reading /home/rdedu1/.m2/repository/com/thoughtworks/paranamer/paranamer/2.3/paranamer-2.3.jar; error in opening zip file
    

    解决方法:
    使用rm -rf jar_path命令删除相应的jar包
    例如:

    rm -rf /home/rdedu1/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar
    

    这里写图片描述

    查询对应jar包的位置也可以在eclipse中查询:

    这里写图片描述

    删除jar包后再去mvnrepository网站中搜索相应jar的放入pom文件中自动下载
    例如:

    <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.0.23.Final</version>
    </dependency>
    

    这里写图片描述

    下载完后应该就可以运行了。。。

    展开全文
  • java.lang.IllegalArgumentException 如何解决这个异常

    万次阅读 多人点赞 2018-07-18 16:03:47
    很多人说这个异常是spring版本和jdk版本不一致导致的,其实不然你可以运行一下这一段代码 public static void main(String[] args) { String timeStamp = "1531782000000";//直接是时间戳 ...
  • 一般报java.lang.NullPointerException的原因有以下几种

    万次阅读 多人点赞 2006-07-06 16:56:00
    一般报java.lang.NullPointerException的原因有以下几种: ·字符串变量未初始化; ·接口类型的对象没有用具体的类初始化,比如: List lt; 会报错 List lt = new ArrayList(); 则不会报错了 ·当一个对象的值为空...
  • 发生这一错误的主要原因是Controller类中需要接收的是Date类型,但是在页面端传过来的是String类型,最终导致了这个错误。 这里提供两种解决方案,一种是局部转换,一种是全局转换。 一....@Controller ...
  • 怎么解决java.lang.NoClassDefFoundError错误

    万次阅读 多人点赞 2015-06-23 15:22:29
    前言在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError...
  • 关于怎么解决java.lang.NoClassDefFoundError错误

    万次阅读 多人点赞 2018-11-15 13:48:57
      五一在部署新的统一登录时,遇到...很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。 NoClassDefFoundError错误发生的原因 NoC...
  • java.lang.UnsupportedOperationException解决方法【转】

    万次阅读 多人点赞 2018-09-14 16:51:46
    amp;fps=1 做开发一定要注重细节。...在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下。  代码块:...
  • HTML标签lang lang - 指定语言种类

    千次阅读 2019-04-08 13:38:26
    HTML标签lang lang - 指定语言种类
  • export LANG

    千次阅读 2018-06-01 21:46:17
    export LANG=zh_CN.UTF-8 
  • java.lang.ClassNotFoundException问题的解决

    万次阅读 2019-08-12 17:43:53
    作者:朱金灿 来源:https://blog.csdn.net/clever101 调试运行一个java项目出现错误,错误信息如下: 严重: Error configuring application listener of class ... java.lang.ClassNotFoundException: ...
  • java.lang.NoSuchMethodError的解决办法

    万次阅读 2017-05-14 16:23:29
    这两天在做一个项目,出来这样一个错,让我很是...Caused by: java.lang.NoSuchMethodError: org.springframework.beans.factory.support.DefaultListableBeanFactory.getDependencyComparator()Ljava/util/Comparator;
  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String  at java.lang.Iterable.forEach(Iterable.java:75)  at org.springframework.http.converter.FormHttpMessageC...
  • java.lang.NoClassDefFoundError: Could not initialize class xxx JVM在加载类的时候,会初始化类里的静态变量,或执行静态块,如果这个时候抛出了异常,该类就会加载失败,那么以后任何使用到这个类的地方,都会...
  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String问题背景 接口中参数为 Map问题分析 以 Map// 示例:模拟将Integer存入Map,取出后强制转为String public static void main...
  • 在单元测试的时候报:java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use 问题有可能是有两个: 1.你没有写启动类: 2.虽然你写了启动类但是你的启动类所在的包和单元...
  • java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Tue Nov 03 09:21:01 ...
  • java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double 原因:xml文件中 是double 儿实体类中是string类型 解决方法:改成同一种类型
  • StringUtils在commons-lang3和commons-lang中的区别

    万次阅读 多人点赞 2017-07-12 23:50:37
    最近经常需要对String做一些判断和处理,于是就用到了Apache提供的StringUtils这个工具类,用的时候发现有两个不同的版本,一个版本位于org.apache.commons.lang下面,另一个则位于org.apache.commons.lang3下面。...
  • 版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。 ...解决——》Handler dispatch ... nested exception is java.lang.NoSuchMethodError1、操作2、现象(错误...
  • Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at org.apdplat.word.dictionary.impl.DoubleArrayDictionaryTrie.allocate(DoubleArrayDictionaryTrie.java:188) at or...
  • nested exception is java.lang.StackOverflowError”的错误。总结一哈:StackOverflowError通常情况下是死循环或者是循环依赖了。Caused by: java.lang.StackOverflowError at com.hry.seckill.servi...
  • java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer异常 这个异常非常容易理解,String类型的数据转换为Integer,出错了。 如果发生这个异常,仔细检查你在应该填写数字的地方...
  • apache提供的众多commons工具包,号称Java第二API,而common里面lang3包更是被我们使用得最多的。因此本文主要详细讲解lang3包里面几乎每个类的使用,希望以后大家使用此工具包,写出优雅的代码 讲解版本为(2018年...
  • java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang<...
  • java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 问题背景 接口中参数为 Map<String,Object>取出某 KEY 值时,强制将其转为 String ,出现上述异常 问题分析 以 Map&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,727,401
精华内容 690,960
关键字:

lang