Java 编程基础

基本命令和概念

  • 基本命令: Dir, Cd…, Cd, Cls, Exit
  • 项目结构: project, module, package, class
  • 代码注释: /* +enter, ctrl+shift+/
  • 特殊字符: \n (换行), \t (制表符)

代码示例:

CMD 常用命令:
Dir         列出目录内容
Cd..        返回上一级目录
Cd\         回到根目录
Cls         清屏
Exit        退出

项目层级:project → module → package → class

数据类型和运算

  • 基本数据类型:
    • int (整数)
    • long (长整数, L后缀)
    • double (双精度浮点数)
    • float (单精度浮点数, F后缀)
    • char (字符)
  • 字符编码: A(65), a(97), 0(48)
  • 存储单位: B(字节), KB, MB, GB, TB (1024进制)
  • 进制转换: 十进制、二进制、八进制、十六进制

代码示例:

字符编码对照:
'A' = 65    'a' = 97    '0' = 48

存储单位换算(1024 进制):
1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB

进制换算(8421 法):
二进制 1010 = 十进制 8+0+2+0 = 10

数组操作

  • 数组声明:
    • 数据类型[] 数组名 = new 数据类型[长度];
    • 数据类型[] 数组名 = {元素1, 元素2, ...};
    • 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ...};
  • 数组遍历: for循环、while循环
  • 数组索引: 从0开始,最大索引为长度-1
  • 多维数组: 二维数组、三维数组

代码示例:

// 方式一:指定长度
数据类型[] 数组名 = new 数据类型[长度];

// 方式二:直接初始化
数据类型[] 数组名 = {元素1, 元素2, ...};

// 方式三:new 同时初始化
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ...};

// 遍历示例(while + for)
int[] Arr = new int[4];
int index = 0;
while (index < Arr.length) {
    // 处理 Arr[index]
    index++;
}

for (int i = 0; i < Arr.length; i++) {
    // 处理 Arr[i]
    if (i == 2) break;   // 满足条件跳出
}

控制流程

  • 条件语句:
    • if-else 结构
    • switch 语句
  • 循环语句:
    • for 循环
    • while 循环
    • do-while 循环
    • breakcontinue 关键字

代码示例:

// if-else
if (条件) {
    // true 分支
} else {
    // false 分支
}

// switch
switch (变量) {
    case1: ...; break;
    case2: ...; break;
    default: ...;
}

// for / while / do-while
for (int i = 0; i < 10; i++) { }
while (条件) { }
do { } while (条件);

面向对象编程

  • 类与对象:
    • 类的定义和实例化
    • 构造方法: 无参构造、有参构造
    • this 关键字: 引用当前对象
    • 对象创建: Student s1 = new Student();
  • 封装:
    • 私有成员变量
    • 公共getter/setter方法
    • JavaBean规范
  • 继承:
    • extends 关键字
    • 方法重写 (@Override)
    • super 关键字: 调用父类方法
  • 多态:
    • 接口实现
    • 抽象类
    • instanceof 关键字: 类型检查
  • 访问修饰符:
    • public: 公共访问
    • protected: 受保护访问
    • private: 私有访问
    • 默认: 包访问

代码示例:

// 对象创建:new 在堆中创建对象,s1 指向它
Student s1 = new Student();
Student s1 = new Student();  // s1 指向新对象

// 空字符串
String s = "";

// this 关键字:区分成员变量与局部变量
this.name = name;

// JavaBean 规范:私有字段 + get/set
public class Student {
    private int score;
    public int getScore() { return score; }
    public void setScore(int score) { this.score = score; }
}
// 访问属性
s1.score;

// 继承:构造方法调用
super();        // 调用父类构造(第一行)
this(...);      // 调用本类重载构造(第一行)

// 多态:向下转型前用 instanceof 判断,防止 ClassCastException
父类 变量名 = new 子类();
if (变量名 instanceof 子类) {
    子类 s = (子类) 变量名;
}

// final:类不能继承、方法不能重写、变量为常量
// static final:静态常量
// abstract:抽象类 / 抽象方法

高级特性

  • 静态成员:
    • 静态变量: 类级别共享
    • 静态方法: 可以直接通过类名调用
    • 静态代码块: 类加载时执行
    • 静态内部类
  • 内部类:
    • 成员内部类
    • 静态内部类
    • 局部内部类
    • 匿名内部类
  • 泛型:
    • 泛型类: class Box<T>
    • 泛型方法: public <T> void printArray(T[] inputArray)
    • 通配符: ? extends Type, ? super Type
    • 类型擦除
  • 异常处理:
    • try-catch-finally 结构
    • 自定义异常类
    • 异常链
    • throws 关键字

代码示例:

// 静态代码块(类加载时执行)与实例代码块(创建对象时执行)
class Demo {
    static {
        // 静态代码块
    }
    {
        // 实例代码块
    }
}
// 注意:static 上下文中不能使用 this

// 内部类创建方式
外部类.内部类 对象1 = new 外部类().new 内部类();
外部类.内部类 对象2 = new 外部类.内部类();
// 内部类中访问外部类成员:外部类.this

// 泛型定义
class 类名<...> { }
interface 接口名<...> { }

// 通配符
? extends Car    // 上限:Car 及其子类
? super Car      // 下限:Car 及其父类
?               // 任意类型
// 常用字母:E T K V

// 异常处理
try {
    // 可能抛异常的代码
} catch (异常类型 e) {
    // 处理
} finally {
    // 一定会执行
}

Java API

  • String类:
    • 不可变性
    • 常用方法: length(), charAt(), substring(), indexOf(), replace()
    • 字符串连接: + 运算符, concat() 方法
    • 字符串比较: equals(), equalsIgnoreCase()
  • 集合框架:
    • ArrayList: 动态数组
    • HashMap: 键值对存储
    • HashSet: 不重复元素集合
    • LinkedList: 链表结构
    • 泛型集合
  • IO流:
    • 文件操作: File
    • 字节流: InputStream, OutputStream
    • 字符流: Reader, Writer
    • 缓冲流: BufferedReader, BufferedWriter
    • 转换流: InputStreamReader, OutputStreamWriter

代码示例:

// String:两种创建方式(常量池 vs new)
String s1 = "...";            // 常量池
String s2 = new String("..."); // 堆中新建对象

// ArrayList 集合
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.get(0);

// File 类:文件/目录操作
File file = new File("路径");
// 1. 创建  2. 删除  3. 判断/获取

JavaScript 编程

DOM操作

  • 元素选择:
    • document.getElementById(): 通过ID选择
    • document.getElementsByClassName(): 通过类名选择
    • document.getElementsByTagName(): 通过标签名选择
    • document.querySelector(): CSS选择器
    • document.querySelectorAll(): 多个元素选择
  • 事件处理:
    • addEventListener(): 添加事件监听器
    • 事件类型: click, mouseover, keydown等
    • 事件对象: event.target, event.type
    • 事件冒泡与捕获
  • 元素属性:
    • 获取属性: element.getAttribute()
    • 设置属性: element.setAttribute()
    • 删除属性: element.removeAttribute()
  • 节点操作:
    • 创建节点: document.createElement()
    • 添加节点: parentNode.appendChild()
    • 删除节点: parentNode.removeChild()
    • 替换节点: parentNode.replaceChild()
    • 克隆节点: element.cloneNode()

代码示例:

// 选择器 + 事件 + 遍历
const box = document.querySelector('#id');
box.addEventListener('click', function() { /* ... */ });
for (let i = 0; i < list.length; i++) { /* ... */ }

// 自定义属性 / 扩展属性
data-name="new"

// 节点关系
元素.parentNode;                    // 父节点
元素.children;                      // 子元素集合
元素.nextElementSibling;            // 下一个兄弟元素
元素.previousElementSibling;        // 上一个兄弟元素

// 滚动 / 偏移量
元素.scrollTop;  元素.scrollLeft;
元素.offsetTop;  元素.offsetLeft;

BOM操作

  • 窗口对象:
    • window 对象: 全局对象
    • alert(): 弹出警告框
    • confirm(): 确认对话框
    • prompt(): 输入对话框
    • console.log(): 控制台输出
  • 位置对象:
    • location 对象: URL操作
    • location.href: 获取或设置URL
    • location.reload(): 刷新页面
    • location.assign(): 加载新文档
  • 历史对象:
    • history 对象: 浏览历史
    • history.back(): 后退
    • history.forward(): 前进
    • history.go(): 跳转到指定历史记录
  • 浏览器检测:
    • navigator 对象: 浏览器信息
    • navigator.userAgent: 用户代理字符串
    • 设备检测: Android、iPhone等移动设备

代码示例:

// Window(全局) 与 DOM(document)
window.alert();
console.log();
var a = 1;  // var 声明的全局变量属于 window

// location:操作地址栏
location.href;   // 获取/设置地址,可用于跳转

// navigator:浏览器信息 + 移动端跳转
(function () {
  const userAgent = navigator.userAgent;
  // Android / iPhone 判断
  const android = userAgent.match(/(Android);?[\s\/]+([\d.]+)?/);
  const iphone = userAgent.match(/(iPhone\sOS)\s([\d_]+)/);
  // 命中则跳转到移动端站点
  if (android || iphone) {
    location.href = 'http://m.itcast.cn';
  }
})();

数据存储

  • localStorage:
    • 本地存储: 永久保存
    • localStorage.setItem(key, value): 设置值
    • localStorage.getItem(key): 获取值
    • localStorage.removeItem(key): 删除值
    • localStorage.clear(): 清空所有
  • sessionStorage:
    • 会话存储: 页面关闭后清除
    • 使用方法与localStorage类似
  • Cookie:
    • 客户端存储: 有过期时间
    • document.cookie: 读取和设置Cookie

代码示例:

// localStorage 三件套
localStorage.setItem(key, value);   // 存
localStorage.getItem(key);          // 取
localStorage.removeItem(key);       // 删
// sessionStorage 用法相同,关闭页面后清除

正则表达式

  • 基本语法:
    • 字符类: [abc], [^abc], \d, \w, \s
    • 量词: * (0次或多次), + (1次或多次), ? (0次或1次), {n}, {n,}, {n,m}
    • 分组: ()
    • 或: |
  • 常用模式:
    • 数字: \d+
    • 字母: [a-zA-Z]+
    • 邮箱: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    • 电话: ^1[3-9]\d{9}$
  • 方法:
    • test(): 测试字符串是否匹配
    • exec(): 执行搜索返回结果
    • match(): 字符串方法,返回匹配数组
    • replace(): 替换匹配内容
    • search(): 搜索匹配位置

代码示例:

// 基本方法
regex.test(字符串);   // 返回 true / false
regex.exec(字符串);   // 匹配返回结果数组,否则 null

// 元字符
\d          // 数字 0~9
[ ]         // 字符集合
[^a-z]      // 取反:非 a-z
.           // 任意单个字符

// 修饰符
/i          // 忽略大小写
/g          // 全局匹配

Web开发技术

JDBC数据库操作

  • 驱动加载:
    • Class.forName("com.mysql.jdbc.Driver"): 加载MySQL驱动
  • 连接管理:
    • DriverManager.getConnection(): 获取数据库连接
    • 连接URL: jdbc:mysql://localhost:3306/database_name
  • SQL执行:
    • Statement: 执行静态SQL
    • PreparedStatement: 执行预编译SQL,防止SQL注入
    • CallableStatement: 调用存储过程
  • 结果处理:
    • ResultSet: 结果集对象
    • next(): 移动到下一行
    • getInt(), getString(): 获取列值
  • 事务管理:
    • conn.setAutoCommit(false): 关闭自动提交
    • conn.commit(): 提交事务
    • conn.rollback(): 回滚事务
  • 连接池:
    • DBCP, C3P0, Druid等连接池技术

代码示例:

// 1. 注册驱动(MySQL 默认端口 3306)
Class.forName("com.mysql.jdbc.Driver");
// url 格式:jdbc:mysql://ip:端口/数据库名

// 2. 获取连接 + 事务控制
conn.setAutoCommit(false);
conn.commit();
conn.rollback();

// 3. 预编译 SQL:? 占位,setXxx(位置从1开始, 值)
String sql = "UPDATE ... WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setXxx(1,);     // 第1个 ?
pstmt.setXxx(2,);     // 第2个 ?
// 执行:DDL/DML 用 executeUpdate();DQL 用 executeQuery()

// 4. 结果集遍历
ResultSet rs = stmt.executeQuery("...");
while (rs.next()) {
    int id = rs.getInt("id");        // int 列
    String name = rs.getString("name"); // String 列
}

// 5. 实体类 Account.java:字段 email、userId,提供 get/set/toString

附:MySQL 日志开启配置(my.ini)

log-output=FILE
general-log=1
general_log_file="D:\mysql.log"
slow-query-log=1
slow_query_log_file="D:\mysql_slow.log"
long_query_time=2

MyBatis框架

  • 配置文件:
    • mybatis-config.xml: 主配置文件
    • 环境配置: development, production
    • 数据源配置
    • 映射器注册
  • Mapper映射:
    • XML映射文件: SQL语句定义
    • 接口映射: Mapper接口
    • 命名空间: 避免SQL ID冲突
  • 动态SQL:
    • if 标签: 条件判断
    • choose-when-otherwise: 类似switch-case
    • foreach 标签: 集合遍历
    • where 标签: 自动处理AND/OR
    • set 标签: 自动处理逗号
  • 参数处理:
    • 单个参数: 直接使用
    • 多个参数: @Param 注解
    • 对象参数: 属性映射
    • 集合参数: collection 属性
  • 结果映射:
    • resultType: 简单类型映射
    • resultMap: 复杂类型映射
    • 列名与属性名映射
  • 常用注解:
    • @Select: 查询
    • @Insert: 插入
    • @Update: 更新
    • @Delete: 删除

代码示例:

<!-- 列名与属性名不一致:方式1 起别名 -->
<select id="selectAll" resultType="brand">
  select id, brand_name as brandName, company_name as companyName,
         ordered, description, status from tb_brand;
</select>

<!-- 方式3:resultMap 映射 -->
<mapper namespace="mapper.usersMapper">
  <resultMap type="User" id="brandResultMap">
    <result column="brand_name" property="brandName"/>
    <result column="company_name" property="companyName"/>
  </resultMap>
  <select id="selectAll" resultMap="brandResultMap">
    select * from tb_brand;
  </select>
</mapper>
// Mapper 接口
public interface usersMapper {
  User selectById(int id);
}
<!-- 多条件查询 -->
<select id="selectByCondition" resultMap="UserResultMap">
  select * from tb_brand
  where status = #{status}
    and company_name like #{companyName}
    and brand_name like #{brandName}
</select>

<!-- 动态 SQL:choose / when / otherwise 相当于 switch-case-default -->
<select id="selectByConditionSingle" resultMap="brandResultMap">
  select * from tb_brand
  <where>
    <choose>
      <when test="status != null">status = #{status}</when>
      <when test="companyName != null and companyName != '' ">
        company_name like #{companyName}
      </when>
      <when test="brandName != null and brandName != ''">
        brand_name like #{brandName}
      </when>
    </choose>
  </where>
</select>

<!-- 更新 -->
<update id="update" parameterType="pojo.User">
  UPDATE tb_brand SET
    brand_name = #{brandName},
    company_name = #{companyName},
    description = #{description},
    status = #{status},
    ordered = #{ordered}
  WHERE id = #{id}
</update>

<!-- 删除单个 -->
<delete id="deleteById">
  delete from tb_brand where id = #{id};
</delete>

<!-- 批量删除:foreach -->
<delete id="deleteByIds">
  delete from tb_brand where id in
  <foreach collection="ids" item="id" separator="," open="(" close=")">
    #{id}
  </foreach>
  ;
</delete>
// 接口方法(@Param 指定集合参数名)
void deleteByIds(@Param("ids") int[] ids);

// 调用:数组参数 collection 用 array,多个参数时用 param1...
int[] id = {4, 7, 8};
usersMapper.deleteByIds(id);

// 注解方式(替代 XML)
@Select @Insert @Update @Delete
// MyBatis 测试类
public class Mybatisdemo {
  public static void main(String[] args) throws Exception {
    int id = 1;
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
    usersMapper usersMapper = sqlSession.getMapper(usersMapper.class);
    // List<User> users = usersMapper.selectAll();
    User users = usersMapper.selectById(id);
    System.out.println(users);
    sqlSession.close();
    // 输出:User [id=1, brandName=, companyName=, ordered=5, description=, status=0]
  }
}
// 注意:openSession(false) 需手动 commit();openSession(true) 自动提交

Servlet技术

  • 生命周期:
    • init(): 初始化方法
    • service(): 服务方法
    • doGet(), doPost(): HTTP方法处理
    • destroy(): 销毁方法
  • 请求处理:
    • HttpServletRequest: 请求对象
    • HttpServletResponse: 响应对象
    • 请求参数获取: getParameter()
    • 请求头获取: getHeader()
  • 会话管理:
    • HttpSession: 会话对象
    • setAttribute(): 设置会话属性
    • getAttribute(): 获取会话属性
    • invalidate(): 使会话失效
  • 过滤器:
    • Filter 接口实现
    • 过滤器链
    • 请求预处理和后处理
  • 监听器:
    • ServletContextListener: 应用上下文监听
    • HttpSessionListener: 会话监听
    • ServletRequestListener: 请求监听

代码示例:

// 基础 Servlet 骨架
public class DemoServlet extends HttpServlet {
  @Override
  public void init() { /* 初始化 */ }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
    String param = req.getParameter("key");  // 获取请求参数
    HttpSession session = req.getSession();
    session.setAttribute("user", "tom");      // 会话存储
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
    doGet(req, resp);
  }

  @Override
  public void destroy() { /* 销毁 */ }
}
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐