java #
java命名:主类和文件名必须一样。
java官方installtion教程,包括设置JAVA_HOME环境变量:
java模块化:
java的模块化只有import语句,和JavaScript类似。但是java没有export导出语句。
java模块化另外一点是使用package来做区分,目的是避免重名和目录结构优化。
demo如下:
红线会提示包名和目录结构不符合。但是并不影响编译,编译后的目录结构仍然是正确的。
java注解和反射:
一个项目一般都会有很多的配置,以前端webpack为例,需要配置输出目录,源文件目录;在router层还需要读取routers。当然js的配置相对简单,router可以直接读取文件,但是假如router非常多,还要分开多个文件,然后读取整个文件夹,为了方便,甚至可以webpack配脚本读取。
因此java使用xml文件进行如上配置。
但是java项目一般会有非常多的配置,因此xml文件会非常杂乱。所以sprintboot为首的最新框架都使用注解进行配置
package hello;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = “Hello, %s!”;
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value=“name”, defaultValue=“World”) String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
java注解的原理是:
java读取到注解时,可以另外写代码来读取注解处的内容,然后来进行特殊处理。例如上述代码中的 RequestMapping注解,可以在程序的主入口处写一段代码,利用反射机制,首先拿到Greeting类,然后用getDeclaredMethods方法可以拿到greeting函数,再用getAnnotation方法,可以拿到注解的信息,最后像前端一样,把路由注册进去。
java异常处理:
java几乎每层都要做异常处理,所以每一层都要报一下错,不然某层catch了不报,调用栈就会出错。
catch (Exception e) {
e.printStackTrace();
}
java的异常为什么要分类?为什么不直接兜底策略?
java原生数组是定长的,扩展了list类来实现不定长数组,不定长数组的本质是对象??
问题:为啥要用List xxx = getArrayList() 这种语法? 据说是为了多态。某天getArrayList不返回ArrayList了,返回newList,假设newList也继承List,则代码不需要变更。
java泛型
java字符串模板