基础碎碎念

javac.exe 编译工具 java.exe 运行工具
javac a.java 编译 java a 运行
http://www.oracle.com/download jdk的下载 及安装

配置环境变量 先增加一个系统变量 JAVA_HOME 再把它设置到 系统环境变量path里,如果不行的话直接将 F:\develop\Java\jdk11\bin 设置到path 里。 path里的每个环境变量之间用;隔开

‘A’ 65 ‘a’ 97 ‘0’ 48 基本数据类型在进行算数运算时会自动提升数据类型(从数据范围小的数据类型提升到数据范围大的数据类型) byte,char, short -> int ->long ->float ->double

+= 等这些赋值运算符 隐含了强制类型转换

逻辑异或 a 和 b 结果相反为 true 相同为false

switch 语句记得 在case 后加 break,否则会发生穿透.直接向下走且不通过 case判断,直到遇到break 或程序结束

idea的下载和安装
https://www.jetbrains.com/idea/

idea 的项目结构,一个project下可以有多个模块 module ,每个模块下面可以有多个包 package

File ->settings ->editor ->font 中的size可以设置字体的大小

Ctrl + Alt + space(空格) 内容提示 代码补全等

数组有定长特性,长度指定后不可更改

一个匿名对象只能使用一次

字符串不变,字符串被创建后其值不能修改,修改后其实都是新的字符串,占用了新的空间

String 效果上是字符数组 底层是靠字节数组实现的

接口的本质是方法的集合

接口中无法定义成员变量,但是可以定义成员常量,并且默认使用 public static final 修饰的

多态就是指同一个行为可以变行为不同的形式,同一个对象在不同的时刻表现出不同的形态

多态可以使程序变的简单,具有扩展性. 弊端:不能执行子类特有的方法,想要调用子类特有的方法必须向下转型

没有方法体的方法称之为抽象方法,具有抽象方法的类为抽象类 有抽象方法的类一定是抽象类,但抽象类不一定拥有抽象方法

抽象类不能被实例化,那么它的构造方法有什么作用? 作用是用于子类访问父类数据的初始化

接口是对行为的抽象

抽象类是对事物的抽象,包括属性和行为. 接口是对行为的抽象

内部类可以直接访问外部类的成员,包括私有成员.外部类想要访问内部类的成员必须先创建内部类的对象 new 外部类().new 内部类()

HashSet 可以理解为 元素为链表的数组,1.8以后数据量较大时进行了优化 哈希表1.8之前是数组+链表的形式

LinkedHashSet 放入和取出元素顺序一致且去重

Comparable 自然排序 compareTo 方法 需要被排序的对象的类实现接口
Comparator比较器 compare(a,b) 需要把比较器传入TreeSet或TreeMap的构造方法

TreeSet 无参构造 自然排序,存入的对象实现 Comparable 接口 TreeSet(Comparator comparator) 有参构造 根据指定的比较器进行比较

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

组成lambda表达式的三要素 形式参数 箭头 代码

函数式接口指的是有且仅有一个抽象方法的接口

lambda具有延迟执行的功能

Runable Comparable 都是可编程接口 lamada表达式既可以作为入参,也可以作为返回值
还有4个编程式接口
Supplier T get() 提供数据的方法
Consumer void accept(T t) 消费数据,对数据进行处理 andthen(c1)
Predicate boolen test(T t) 进行判断 可以多条件判断 and(p1) or(p2) negate(p3)非
Function<T,R> R apply(T) 接收T类型 返回R类型 中间可以进行多次操作 andThen(f1)

类加载机制: 全盘负责 父类委托 缓存机制
反射的第一步就是获取类的字节码对象 有三种方式 1.类名.class 2.类对象.getClass() 3.Class.forName(类的全路径)
基本数据类型也可以通过 .class 获取到字节码对象

Stream 与Collection 操作有两个不同 1. 内部迭代 2.pipelining (流式编程)

函数式接口是lambda表达式的基础,而方法引用是lambda的孪生兄弟

类的加载,类的连接,类的初始化 类加载的三个步骤

模块化 每个模块在一个项目下 然后每个模块的src 下新建一个 module-info.java 的文件 module 模块名 {exports com.xxx(包路径) 导出包}
模块下可以定义接口 及实现类 接口所在的包也需要导出 (实现类的包不导出) 在文件中提供服务 provides 接口名 whit 实现类名
另一个模块也是src 下新建一个 module-info.java 的文件 module 模块名 {requires 模块名 引用导出包的模块 uses 接口名}
在代码中 ServiceLoader.load(接口.class) 获取所有的服务 然后调用服务的方法即可

如果序列化一个对象后,我们修改了类文件,要读取对象文件不报错,需要增加一个字段 serialVersionUID 如果对象某个成员变量不想被序列化那么需要用 transient 关键字修饰

debug的使用
F7 下一步,如果是方法则跳入(只跳一层) F8下一步,遇方法不跳入 F9下一个断点
alt+F8 计算 ctrl+F8在当前行加断点或取消断点 shift+F8 = F9 ctrl+shift+F8 指定当前行断点进入条件,满足条件才会进入断点
idea在debug时可以修改变量的值, 选中debug中的变量 按F2 可修改

@Test @Before @After 自建测试类 不用main方法就可以执行各测试方法, 初始化方法及结束方法 junit测试框架
注解是jdk1.5之后的新特性 是用来说明代码的 使用方法是@注解名称 本质上是接口 定义方法为 @interface
那么按道理接口可以定义什么,注解应该就可以定义什么
注解中可以定义属性(即接口中的抽象方法,但返回值只能是 基本数据类型,字符串,枚举,注解及以上类型的数组) 因为你使用注解的时候,必须对注解的属性赋值,格式为 @注解名(方法名1= 值1,方法名2=值2) 所以注解内的抽象方法叫注解的属性
1.注解的属性可以在定义时使用default定义默认值,那么在使用时该属性可以不传值.
2.如果注解只有一个属性且属性名为value,那么传值时 属性名= 可以省略
3.数组赋值的时候 用{}包裹元素之间逗号隔开,如果只有一个元素,大括号可以省略
注解的作用 1.编译检查 如 @Override 2.编写doc文档 3.代码分析
注解之后大多数时间都是用来代替配置文件的 通过反射获取到注解上定义的值,从而取代配置文件
e.getclause().getclass().getSimpleName() 获取引起异常的最终原因的异常简短名称(不带包名的名称) e.getClause().getMessage(); 异常原因

javac 编译 javap 反编译

mysql数据库下载安装配置好以后 需要先把电脑上的mysql服务启动起来 1.界面操作 2.dos命令 net start mysql 关闭 net stop mysql
从dos 命令 进入 mysql -uroot -proot 可以进入mysql数据库 或 mysql -uroot -p 然后密码输入 前一个方式是明码输入的,不太友好 或mysql -h127.0.0.1 -uroot -proot

聚合函数会忽略空值 null 所以要对某一行进行聚合函数操作的时候,可以 ifnull(列名,默认值)

group by having 组合使用 分组是为了统计,所以一般会和聚合函数一起使用

where 用于分组前 having 用于分组后 where不可以跟聚合函数 having可以跟聚合函数

mysql中的limit [offset起始位置,默认是0,跳过几个 ][length 显示的个数]

– 备份 day21 数据库中的数据到 d:\day21.sql 文件中
mysqldump -uroot -proot day21 > d:/day21.sql
还原
删除 day21 数据库中的所有表
use day21;
source d:/day21.sql;
null 不存在重复的问题
自增只能用于主键

一对一 一张或两张表
一对多 两张表 主外键关联
多对对 三张表 多一个中间表

多表查询分内连接和外连接, 内连接分隐式内连接和显式内连接,
隐式内连接 select * from a,b where a.id=b.id
显式内连接 select * from a inner join b on a.id=b.id 其中inner可以省略
左外连接 select * from a left outer join b on a.id=b.id outer可以省略
右外连接 select * from a right outer join b on a.id b.id 在内连接的基础上全部显示右表 左表不存在的部分显示为null

子查询 单行单列 跟> <> =等符号 多行单列 跟 in 多行多列 跟 from 作为一个表

mysql中 @@表示全局变量 select @@autocommit; 查询自动提交事务 默认1 默认开启事务的

事务的四大特性 ACID 原子性,一致性,隔离性,持久性
数据库隔离级别越高,安全性越高,性能越差
四个隔离级别由高到低 串行化,可重复读,读已提交,读未提交 隔离的问题 幻读 不可重复读 脏读

jdbc 数据库驱动需要额外去下载,这是由各大数据库厂商提供的对jdbc的实现类

使用数据库连接池后,connection.close() 不是关闭连接 而是将连接归还连接池

jdbcTemplate.query(sql,new BeanPropertyRowMapper(Emp.class)) 就可以把查询的结果直接封装到对象中

如果客户请求的是动态资源,那么服务器会先执行动态资源,将动态资源转换为静态资源再发送给客户

80端口号是http协议的默认端口号

导入 json-20160807.jar jar包 直接调用 XML.toJSONObject(“xml内容”) 就可以把XML转化为 json

tomcat下载地址 https://tomcat.apache.org

tomcat的启动文件里会使用 JAVA_HOME 环境变量,所以必须进行配置 Tomcat是纯java编写的

netstat -nao 在windows cmd命令窗口下面找到各个进程的端口及进程号

修改Tomcat端口号的话到 conf/server.xml 中修改各端口 Tomcat启动日志里中文乱码的话,到conf/logging.properties 中将最后一个 UTF-8 修改为GBK

tomcat部署项目的方式
1.将项目直接放到webapps 文件夹下 /放置项目的war包 项目运行过程中可以自动解压,删除war包后项目也会被自动删除
2.在conf/server.xml文件 在 标签体中配置 docBase 项目存放的路径 path 虚拟目录
3.在conf/catalinna/localhost 文件中新建一个 任意名称.xml 里面编写 访问 localhost:8080/任意名称/真实文件 便可

动态项目和静态项目
有WEB-INF 的java项目是动态项目
动态项目的目录结构如下:
项目根目录
WEB-INF 目录
web.xml --项目的核心配置
classess --字节码文件
lib --引用的jar包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值