Java 教程 在线

2690Notepad++ 格式化Java代码

Notepad++ 格式化Java代码

NotePad++ 轻量级的代码编辑器,占用内存少,运行速度快,

Notepad++ 支持NppAStyle插件 完成格式化

下载插件NppAStyle.dll

在github上是可以直接下载的,32位64位都有

https://github.com/ywx/NppAStyle/releases

后找到安装的Notepad++的安装目录

进入  plugins文件夹

把刚才解压的NppAStyle.dll复制到这里

重新启动Notepad++

在插件中选择NppAStyle->option

选择不同的代码格式

比如Java

同时也支持 php , c 等语言

2689Notepad plus Java

java 编码GBK的不可映射字符的解决方法

notepad ++ 编辑器

未添加注释的时候未报错,添加了注释就报错

解决方法一

在编译源程序的时候

命令这样写

javac -encoding utf-8 HelloWorld.java

上面教材中

保存javac命名

NPP_SAVE

javac "$(FULL_CURRENT_PATH)"

还有

NPP_SAVE

javac  -encoding utf-8 "$(FULL_CURRENT_PATH)"

cd "$(CURRENT_DIRECTORY)"

java $(NAME_PART)

复制到方框中

保存run命名

方法二

保存文件时选择GB2312字体即可

2443Java 8 函数式接口

eval 函数可以写为如下格式

private static void eval(List<Integer> list, Predicate<Integer> predicate) {
    list.stream().filter(predicate).forEach(System.out::println);
}

或者直接可以不用定义 eval 函数使用

list.stream().filter(n -> n > 3).forEach(System.out::println);

来输出所有大于 3 的数字

2442Java 8 函数式接口

关于 @FunctionalInterface 注解

Java 8为函数式接口引入了一个新注解@FunctionalInterface,主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。

正确例子,没有报错:

@FunctionalInterface
interface GreetingService
{
    void sayMessage(String message);
}

错误例子,接口中包含了两个抽象方法,违反了函数式接口的定义,Eclipse 报错提示其不是函数式接口。

提醒:加不加 @FunctionalInterface 对于接口是不是函数式接口没有影响,该注解只是提醒编译器去检查该接口是否仅包含一个抽象方法

函数式接口里允许定义默认方法

函数式接口里是可以包含默认方法,因为默认方法不是抽象方法,其有一个默认实现,所以是符合函数式接口的定义的;

如下代码不会报错:

@FunctionalInterface
interface GreetingService
{
    void sayMessage(String message);

    default void doSomeMoreWork1()
    {
        // Method body
    }

    default void doSomeMoreWork2()
    {
        // Method body
    }
}

函数式接口里允许定义静态方法

函数式接口里是可以包含静态方法,因为静态方法不能是抽象方法,是一个已经实现了的方法,所以是符合函数式接口的定义的;

如下代码不会报错:

@FunctionalInterface
interface GreetingService 
{
    void sayMessage(String message);
    static void printHello(){
        System.out.println("Hello");
    }
}

函数式接口里允许定义 java.lang.Object 里的 public 方法

函数式接口里是可以包含Object里的public方法,这些方法对于函数式接口来说,不被当成是抽象方法(虽然它们是抽象方法);因为任何一个函数式接口的实现,默认都继承了 Object 类,包含了来自 java.lang.Object 里对这些抽象方法的实现;

如下代码不会报错:

@FunctionalInterface
interface GreetingService  
{
    void sayMessage(String message);
    
    @Override
    boolean equals(Object obj);
}

1431Java MySQL 连接

MySQL 8.0 以上版本:

驱动包版本 mysql-connector-java-8.0.12.jar

数据库 URL 需要声明是否使用 SSL 安全验证及指定服务器上的时区:

static final String DB_URL = jdbc:mysql://localhost:3306/facesho?useSSL=false&serverTimezone=UTC;
conn = DriverManager.getConnection(DB_URL,USER,PASS);

原本的驱动器是:

Class.forName("com.mysql.jdbc.Driver");

在 IDEA 里面提示是:Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary

意思是说原本的驱动器不赞成 或者 是废弃了,自动换成了新的驱动器 com.mysql.cj.jdbc.Driver

Class.forName("com.mysql.cj.jdbc.Driver");