基本数据类型:
循环中断和跳出
万物皆对象
Java 中构造器和类名同名,不像其他语言中用的 constructor,分为默认构造器、无参构造器和有参构造器。
this 可以出现在构造器或成员方法中,指当前对象。构造器中用 this 为当前实例对象的成员变量赋值,如果不用 this 而形参又和成员变量同名时,实际上是形参自己赋值给自己了,而不是赋值给对象的成员变量。
类的5大金刚:
代码块:跟类一起优先加载,优先于构造器加载,一般用于初始化静态资源,分为有static修饰的静态代码块(只加载一次)和无static修饰的构造代码块(实例代码块,属于对象,每次创建对象都会加载,一般不会用到)。
mac 快捷键:
注解,泛化,模板方法
依赖用资料包里提供的仓库依赖,自己拉取的会各种报错,nacos 没必要搞个虚拟机跑,mac 或 windows 都可以直接自己本地安装 docker,然后跑个本地 nacos 就行了,配置地址改成本地的 localhost:8848。
项目启动报错,第一个slf4j日志库冲突报错:在pom.xml配置文件 fastdfs-client 依赖下排除掉日志库:
<dependency>
<groupId>com.github.tobatogroupId>
<artifactId>fastdfs-clientartifactId>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>jcl-over-slf4jartifactId>
exclusion>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
<exclusion>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
exclusion>
exclusions>
dependency>
还有一个数据库的报错,在配置的mysql地址路径后面加上useSSL=falseq。
sky-server 子模块,存放配置文件、配置类、拦截器、controller、service、mapper、启动类等
疑问
Java 不支持 js 中的那种方法用 = 给参数设置默认值,不传的时候就使用默认值。
Java 中字符串 String 是引用类型,判断字符串是否相等不能直接像 JavaScript 中用 == 判读,需要用equals,判断是否空字符串要用 str == null || str.isEmpty(),不能直接像 js 中用 str === “” 来判断
报错:StringIndexOutOfBoundsException,最后才发现是写的 sql 里变量 #{name} 忘加末尾的 } 了。更新数据提示成功了一直不生效,sql 条件复制出来改错了:
<if test="name != null">if>
<if test="name != name">if>
redis 非关系型数据库,基于内存所以读写速度相当快。像店铺营业状态这种数据(非多店铺),就只需要存一个是否营业中的状态,用 mysql 的话需要新建一张表,表里面就一个营业状态 status 字段,其实完全没必要,像这种场景 redis 就很适合。
⌘+点击注解,可以跳到源码查看
最新版minio新建容器的命令不一样,api端口也要和console端口不一样,停止然后删除已创建的容器,浏览器访问端口是9001,java代码中的端口是9000
docker run -d -p 9000:9000 -p 9001:9001 --name minio -v /Users/xx/zhou/java/minio/data:/data -v /Users/xx/zhou/java/minio/config:/root/.minio -e "MINIO_ROOT_USER=minio" -e "MINIO_ROOT_PASSWORD=minio123" minio/minio server /data --console-address ":9001"
新版的 minIO 不能访问要把 Buckets 的 Access Policy 设置为 public
各类数据判断:
可以把枚举想象成常量,其实跟常量很类似,可以理解成有强规范约束的常量
Lambda 表达式 JDK 8开始新增的语法形式:用于简化匿名内部类的代码写法,只能用于只有一个抽象方法的函数式接口(不能用于普通类)
抽象类 abstract 只能被继承,接口只能被实现 implements
继承抽象类的子类必须重写抽象类里的所有抽象方法,实现接口的子类必须重写接口里的所有方法(注意抽象类实现接口时不用全部重写,但是继承此抽象类的子类必须重写抽象类+接口里的方法)
List<String> list = new ArrayList<String>();
List 是一个 interface 接口,正常我们应该用 ArrayList 来接收的,这里用 List 接口来接收,在设计模式中有对依赖倒置原则。程序要尽量依赖于抽象,不依赖于具体。
从Java语法上,这种方式是使用接口引用指向具体实现。比如,你若希望用LinkedList的实现来替代ArrayList的话,只需改动一行即可,其他的所有的都不需要改动:
List list = new LinkedList();
这也是一种很好的设计模式.一个接口有多种实现,当你想换一种实现方式时,你需要做的改动很小。这也就是我们常听到的面向接口编程。但是注意这样也有个不好的点,就是即使类里面有但是没在接口中定义的方法就不能用了。
审核文章和生成文章详情html文件时,用到的 feign 和@Async 异步方法注解,新增文章会报错,直接把 ArticleFreemarkerServiceImpl 里 buildArticleToMinIO 方法上的 @Async 注解删掉就可以了
List 和 string[] 的区别?
同时运行多个 spring 服务,最下面的一个服务颜色是灰色的,不影响运行,但是看着别扭。原因是 IDEA 限制了同时运行的服务数量,自己在 Settings - Advanced Settings - Run/Debug 那可以设置,默认是 5,所以超过运行超过5个服务就是灰色的了,注意设置了需要重启 IDEA。
某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等),产生数据的模块就形象地称为生产者,而处理数据的模块就称为消费者。
人人都是码农:AI时代,零基础也能学会编程!关于作者:从美工、前端开发一路成功转型Java后端的野生码农 ,分享UI转前端、前端转Java、全栈开发、AI人工智能和码农搞钱副业…