标签:JDK相关


启动项目出现异常Unsupported major.minor version 52.0


原因:
当你使用了高版本的 JRE(如1.8) 编译出.class 文件,但是运行的时候反而使用低版本的 JRE

major version:

Java SE 8 = 52(当前), 
Java SE 7 = 51, 
Java SE 5.0 = 49, 
JDK 1.4 = 48, 
JDK 1.3 = 47, 
JDK 1.2 = 46

解决方案:

1、使用高版本的 JRE 运行,如当报错为Unsupported major.minor version 52.0时,使用 1.8 运行 
基本适用所有情况

2、适用于自己编译的.class文件时,如若是第三方 jar 包引起的报错,那么可以使用以下方式
using java -target 1.6 option

以下为intellij IDEA解决此问题的步骤,同样适用于Android Studio 
1、安装 JDK 1.8 
2、更改 java compiler 

打开Settings找到java compiler 
设置project bytecode version:1.8
设置Pre-module bytecode version:对应module的version为1.8

3.更改project sdk
打开project Structure
选中project 设置project SDK为1.8
(如没有1.8选项,请在下方SDKs中添加)
设置project language level:
8-Lambdas,...

4.点击apply,ok完成

IllegalArgumentException解决


最近经常性搞一些老项目,老技术,算是了解经典了
那么在这个过程中经常会出现版本不匹配的问题

例如这次,我电脑上的jdk是1.8的
练习的技术使用的是1.7的,虽无明显报错
但是无法正常执行

启动过程一直报IllegalArgumentException

解决办法,重装jdk1.7

为了不走弯路,希望大家在开发过程中一定不要偷懒,看清楚环境要求

Eclipse启动报错,找不到jvm.dll


启动eclipse报错,根据报错信息显示可知是找不到jdk下的jvm.dll文件
对照报错信息显示的路径我们可以找到对应的文件

这种情况的话就是版本不兼容
打开eclipse.ini通过
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130521-0416
可知,eclipse为64位

打开cmd执行java -version
如果没有显示bit-64则说明当前jdk为32位

重新下载jdk选择名称带有x64的jdk
带有x86的为32位的jdk

下载安装之后切换JAVA_HOME路径即可

JavaJDK历史版本下载


打开百度,搜索JDK

进入到Orcle官网下载页面

选择Java SE

选择Downloads

移动到最底端

找到Java Archive选中其后的下载按钮

在跳转页选择自己想要下载的任意版本

JDK版本降低无效


依照原本安装为jdk1.8降级为jdk1.7无效为例

前提:
1.之前安装jdk版本为1.8
2.重新安装jdk1.7并将JAVA_HOME切换为1.7路径
3.点击确定后打开cmd执行java -version显示还是1.8

解决方案:
1.删除C:\Windows\System32目录下的java.exe、javaw.exe、javaws.exe三个文件
如果没有找到这些文件就跳过
2.删除环境变量Path中C:\ProgramData\Oracle\Java\javapath的配置
把path的值贴出来看一下应该会有这一段的,直接删掉重新查看版本显示1.7

JDK8特性之默认方法


//一个接口有默认方法,考虑这样的情况,一个类实现了多个接口,
//且这些接口有相同的默认方法,以下实例说明了这种情况的解决方法:
public interface vehicle {
   default void print(){
      System.out.println("我是一辆车!");
   }
}
 
public interface fourWheeler {
   default void print(){
      System.out.println("我是一辆四轮车!");
   }
}
//第一个解决方案是创建自己的默认方法,来覆盖重写接口的默认方法:
public class car implements vehicle, fourWheeler {
   default void print(){
      System.out.println("我是一辆四轮汽车!");
   }
}
//第二种解决方案可以使用 super 来调用指定接口的默认方法:
public class car implements vehicle, fourWheeler {
   public void print(){
      vehicle.super.print();
   }
}

//Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法
public interface vehicle {
   default void print(){
      System.out.println("我是一辆车!");
   }
    // 静态方法
   static void blowHorn(){
      System.out.println("按喇叭!!!");
   }
}
//该静态方法可直接调用
class Car implements Vehicle, FourWheeler {
   public void print(){
      Vehicle.super.print();
      FourWheeler.super.print();
      Vehicle.blowHorn();
      System.out.println("我是一辆汽车!");
   }
}
1.接口可以定义一个默认方法
2.接口可以定义静态方法

JDK8特性之Lambda 表达式


public class Java8Tester {
   public static void main(String args[]){
      Java8Tester tester = new Java8Tester();
        
      // 类型声明
      MathOperation addition = (int a, int b) -> a + b;
        
      // 不用类型声明
      MathOperation subtraction = (a, b) -> a - b;
        
      // 大括号中的返回语句
      MathOperation multiplication = (int a, int b) -> { return a * b; };
        
      // 没有大括号及返回语句
      MathOperation division = (int a, int b) -> a / b;
        
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
        
      // 不用括号
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
        
      // 用括号
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
        
      greetService1.sayMessage("Runoob");
      greetService2.sayMessage("Google");
   }
    
   interface MathOperation {
      int operation(int a, int b);
   }
    
   interface GreetingService {
      void sayMessage(String message);
   }
    
   private int operate(int a, int b, MathOperation mathOperation){
      return mathOperation.operation(a, b);
   }
}
要点:
1.通过声明接口实现接口中的方法
2.设置类中的方法参数 传递参数及实现方法的接口对象
3.调用类中的方法实现逻辑功能
----------------------------------------------------
以上实例实现了简单的加减乘数及一个欢迎日志打印
通过对比之前实现该功能的逻辑代码可看出JDK8带来的简洁!