面向对象
1. 面向对象的概念
- 面向对象编程(OOP)是一种编程范式,它将现实世界的事物抽象为对象,通过类和对象来创建各种功能模块,以此来设计和开发软件。
2. 类与对象
- 类:是对象的模板,定义了对象的属性和方法。
- 对象:是类的实例,具有类的属性和方法。
3. 封装
- 隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
4. 继承
- 一个类(子类)继承另一个类(父类)的属性和方法,并可以扩展自己的属性和方法。
5. 多态
- 父类引用指向子类对象,运行时根据对象类型调用相应的方法。
6. 抽象类与接口
- 抽象类:不能被实例化的类,可以包含抽象方法和非抽象方法。
- 接口:全由抽象方法和常量组成的类,不能被实例化,实现类必须实现其所有方法。
7. 构造方法
- 用于创建和初始化对象的方法,与类名相同,没有返回类型。
8. this关键字
- 引用当前对象的属性和方法。
9. 访问控制修饰符
- public、protected、default(无修饰符)、private。
常用类
1. String类
- 字符串是不可变的,常用方法有charAt()、substring()、length()、equals()等。
package com.apex_legends.javaoop.string_demo;
import java.lang.reflect.Array;
import java.util.Arrays;
public class Stringtest {
public static void main(String[] args) {
String s = "abc";
s = s + "lsk";
s = s + "mbn";
String ss = "abc";
System.out.println(ss = s);
System.out.println(s.equals(ss));
System.out.println(s);
String s2 = new String("NCY");
String s3 = "=92";
byte[] bytes = s3.getBytes();
byte[] a = Arrays.copyOf(bytes,3);
Arrays.sort(a);
System.out.println(Arrays.toString(bytes));
System.out.println(Arrays.toString(a));
String s4 = new String(bytes);
String s5 = new String(a);
System.out.println(s4);
System.out.println(s5);
String n1 = new String("abcd");
String n2 = new String("abcD");
System.out.println(n1.equalsIgnoreCase(n2));//忽略大小写
System.out.println(n1.contains("ab"));//判断有没有包含连续子串
System.out.println(n1.isEmpty());//是否为空串""
System.out.println(n1.startsWith("a"));//判断开头
System.out.println(n1.endsWith("a"));//判断结尾
System.out.println(s.charAt(4));//给一个位置,返回字符
System.out.println(s.indexOf("c"));//给一个字符,返回首次位置
System.out.println(s.lastIndexOf("c"));//从后向前查的indexof
String x1 = s.substring(3);
String x2 = s.substring(2,4);
System.out.println(x1);
System.out.println(x2);
String x3 = "dadJIKH";
System.out.println(x3.toLowerCase());
System.out.println(x3.toUpperCase());//转变英文字母大小写,原字符串不
String str = "133-2457-1685";
String []strings = str.split("-");
System.out.println(Arrays.toString(strings));//用符号分割字符串
System.out.println(x3.replace("a", "o"));
System.out.println(x3.replaceAll("d", "c"));
System.out.println(x3.replaceFirst("c", "d"));
//替换字符但是字符串还是不变
String sss = " adad adad ";
System.out.println(sss.trim());
System.out.println(sss.trim().length());//去除两端空格
}
}
2. StringBuilder和StringBuffer类
- 可变字符串,StringBuilder非线程安全,StringBuffer线程安全。
StringBuilder
import java.util.Scanner;
public class StringBuilderExample {
public static void main(String[] args) {
// 创建一个Scanner对象以接收用户输入
Scanner scanner = new Scanner(System.in);
// 创建一个StringBuilder对象
StringBuilder stringBuilder = new StringBuilder();
// 循环接收用户输入,直到输入"exit"为止
while (true) {
System.out.print("请输入一个字符串(输入'exit'退出): ");
String input = scanner.nextLine();
// 检查是否输入了'exit'
if ("exit".equalsIgnoreCase(input)) {
break;
}
// 将输入的字符串添加到StringBuilder中
stringBuilder.append(input);
stringBuilder.append(" ");
}
// 关闭Scanner对象(可选,但在实际应用中推荐这样做)
scanner.close();
// 将StringBuilder转换为String并打印结果
String result = stringBuilder.toString();
System.out.println("您输入的字符串是: " + result);
}
}
StringBuffer
package com.apex_legends.javaoop.string_demo;
public class StringBuffer_test {
public static void main(String[] args) {
/*
StringBuffer是内容可以改变的字符串
char[] value;没有使用final修饰,每次添加内容都是对此数组进行操作
不会创建新的字符串对象。
*/
//StringBuffer s1 = new StringBuffer("abcd");//创建内容长度+16的char数组
StringBuffer s1 = new StringBuffer(10);//直接指定空参的长度
s1.append("efg");//默认向字符串末尾添加
System.out.println(s1);
s1.insert(1,"Q");//指定位置插入
System.out.println(s1);
s1.deleteCharAt(2);
System.out.println(s1);
s1.append("asdfghjkl;");
s1.delete(3,6);
System.out.println(s1);
s1.replace(1,2,"孙笑川");//替换字符串
System.out.println(s1);
s1.reverse();//反转字符串
System.out.println(s1);
}
}
3. 包装类
- 将基本数据类型封装为对象,如Integer、Bigdicimal等。
Integer
package com.apex_legends.javaoop.integer;
import java.math.BigInteger;
public class Integer_demo {
public static void main(String[] args) {
String a = "679876545670987656789987612345678912345678901234567891234567891234567890987654345678985678987644567890987656789876765434567898765434567898765434567898765";
BigInteger bigInteger1 = new BigInteger(a);
BigInteger bigInteger2 = new BigInteger("3231234567890123456789012345678991234567891212345678912345555454545578923456789023456789567898765456787654");
System.out.println(bigInteger1.multiply(bigInteger2));
}
}
Bigdicimal
package com.apex_legends.javaoop.bigdicmal;
import java.math.BigDecimal;
import java.math.BigInteger;
public class Decimailtest {
public static void main(String[] args) {
BigDecimal bigDecimal1 = new BigDecimal("0.12");
BigDecimal bigDecimal2 = new BigDecimal("0.001");
System.out.println(bigDecimal1.divide(bigDecimal2, 1,5));
}
}
4. 日期类
- Date类、Calendar类等。
Date
package com.apex_legends.javaoop.data_demo;
import java.util.Date;
public class Datetest {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
System.out.println(date.getDate());
System.out.println(date.getYear()+1900);
System.out.println(date.getTime());
//获取的是1970年1月1日 0:0:0,到程序运行时刻的毫秒值
Date date1 = new Date();
System.out.println(date1.getTime() - date.getTime());
Date date2 = new Date(1708843601096L);
//将指定的long类型的时间戳取出构造一个时间对象
System.out.println(date2);
}
}
Calendar
package com.apex_legends.javaoop.calendar_demo;
import java.util.Calendar;
public class Calendartest {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.getTimeInMillis());
}
}
5. Math类
- 提供数学运算的静态方法,如sqrt()、pow()等。
package com.apex_legends.javaoop.math_demo;
public class mathtest {
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.abs(-3));
System.out.println(Math.sqrt(9));
System.out.println(Math.pow(2, 3));
}
}
Math类的方法太多,此处代码不一一举例
6. Random类
public class Randomtest {
public static void main(String[] args) {
Random random = new Random();
System.out.println(random.nextBoolean());
System.out.println(random.nextFloat());
System.out.println(random.nextInt(100));//不超过这个范围,比如这里不能是100
byte[] bytes = new byte[5];
random.nextBytes(bytes);
System.out.println(Arrays.toString(bytes));
}
}
Arrays类
BinarySearch二分查找
package com.apex_legends.javaoop.binarysearch_demo;
import java.util.Arrays;
public class BinarySearch {
public static void main(String[] args) {
int[] a = {5,4,3,2,1};
Arrays.sort(a,0,3);
/*
只排序两数之间
*/
System.out.println(Arrays.toString(a));
Arrays.sort(a);
/*
sort() 默认升序排序
*/
System.out.println(Arrays.toString(a));
System.out.println(Arrays.binarySearch(a, 5));
}
}
CopyOf
package com.apex_legends.javaoop.copyof_demo;
import java.util.Arrays;
public class CoypOf1 {
public static void main(String[] args) {
int[] c= new int[3];
c[0] = 1;
c[1] = 2;
c[2] = 3;
int[] d = Arrays.copyOf(c,5);
System.out.println(Arrays.toString(d));
int[] e = {1,2,3,4,5};
Arrays.fill(e,0);
System.out.println(Arrays.toString(e));
}
}
集合
1. 集合框架
- Java提供了一套完整的集合框架,包含List、Set、Queue、Map等接口及其实现类。
2. List
- 有序集合,允许元素重复,常见实现有ArrayList、LinkedList等。
ArrayList
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
// 创建一个新的ArrayList
ArrayList<String> list = new ArrayList<>();
// 向列表中添加元素
list.add("元素1");
list.add("元素2");
list.add("元素3");
// 访问列表中的元素
System.out.println("第一个元素: " + list.get(0));
// 遍历列表
for (String item : list) {
System.out.println(item);
}
// 修改列表中的元素
list.set(1, "修改后的元素2");
// 检查元素是否存在
System.out.println("元素2是否存在: " + list.contains("元素2")); // 输出 false
System.out.println("修改后的元素2是否存在: " + list.contains("修改后的元素2")); // 输出 true
// 移除元素
list.remove("修改后的元素2");
// 再次遍历列表
for (String item : list) {
System.out.println(item);
}
// 获取列表的大小
System.out.println("列表的大小: " + list.size());
}
}
LinkedList
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
// 创建一个新的LinkedList
LinkedList<String> list = new LinkedList<>();
// 向列表的开头添加元素
list.addFirst("元素1");
list.addFirst("元素0");
// 向列表的结尾添加元素
list.addLast("元素2");
// 访问列表的开头和结尾元素
System.out.println("开头元素: " + list.getFirst());
System.out.println("结尾元素: " + list.getLast());
// 遍历列表
for (String item : list) {
System.out.println(item);
}
// 从开头移除元素
list.removeFirst();
// 从结尾移除元素
list.removeLast();
// 再次遍历列表
for (String item : list) {
System.out.println(item);
}
// 获取列表的大小
System.out.println("列表的大小: " + list.size());
}
}
3. Set
- 无序集合,不允许元素重复,常见实现有HashSet、TreeSet等。
HashSet
import java.util.HashSet;
public class HashSetExample {
public static void main(String[] args) {
// 创建一个新的HashSet
HashSet<String> set = new HashSet<>();
// 向集合中添加元素
set.add("元素1");
set.add("元素2");
set.add("元素1"); // 重复添加,不会生效
// 遍历集合
for (String item : set) {
System.out.println(item);
}
// 检查元素是否存在
System.out.println("元素1是否存在: " + set.contains("元素1")); // 输出 true
System.out.println("元素3是否存在: " + set.contains("元素3")); // 输出 false
// 移除元素
set.remove("元素1");
// 再次遍历集合
for (String item : set) {
System.out.println(item);
}
// 获取集合的大小
System.out.println("集合的大小: " + set.size());
}
}
TreeSet
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
// 创建一个新的TreeSet
TreeSet<Integer> set = new TreeSet<>();
// 向集合中添加元素
set.add(3);
set.add(1);
set.add(2);
// 遍历集合(元素将按升序排列)
for (Integer item : set) {
System.out.println(item);
}
// 检查元素是否存在
System.out.println("元素1是否存在: " + set.contains(1)); // 输出 true
// 移除元素
set.remove(2);
// 再次遍历集合
for (Integer item : set) {
System.out.println(item);
}
// 获取集合的大小
System.out.println("集合的大小: " + set.size());
// 使用自定义比较器
TreeSet<String> stringSet = new TreeSet<>((s1, s2) -> s2.compareTo(s1)); // 降序排列
stringSet.add("apple");
stringSet.add("banana");
stringSet.add("cherry");
// 遍历自定义排序的集合
for (String fruit : stringSet) {
System.out.println(fruit);
}
}
}
4. Map
- 键值对集合,键唯一,值可重复,常见实现有HashMap、TreeMap等。
HashMap
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
// 创建一个新的HashMap
Map<String, Integer> map = new HashMap<>();
// 向映射中添加键值对
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
// 通过键来获取值
Integer appleCount = map.get("apple");
System.out.println("Apple count: " + appleCount);
// 遍历映射
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// 检查键是否存在
System.out.println("Does 'banana' exist? " + map.containsKey("banana"));
// 检查值是否存在(注意:HashMap不直接支持通过值来查找键)
boolean containsValue = false;
for (Integer value : map.values()) {
if (value == 2) {
containsValue = true;
break;
}
}
System.out.println("Does the value 2 exist? " + containsValue);
// 移除键值对
map.remove("banana");
// 再次遍历映射
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// 获取映射的大小
System.out.println("Map size: " + map.size());
}
}
HashMap结构图
TreeMap
import java.util.TreeMap;
import java.util.Map;
public class TreeMapExample {
public static void main(String[] args) {
// 创建一个新的TreeMap
Map<String, Integer> map = new TreeMap<>();
// 向映射中添加键值对
map.put("cherry", 3);
map.put("apple", 1);
map.put("banana", 2);
// 遍历映射(键将按升序排列)
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// 通过键来获取值
Integer bananaCount = map.get("banana");
System.out.println("Banana count: " + bananaCount);
// 检查键是否存在
System.out.println("Does 'apple' exist? " + map.containsKey("apple"));
// 移除键值对
map.remove("apple");
// 再次遍历映射
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
// 获取映射的大小
System.out.println("Map size: " + map.size());
// 使用自定义比较器(按字符串长度排序)
TreeMap<String, Integer> lengthSortedMap = new TreeMap<>((s1, s2) -> Integer.compare(s1.length(), s2.length()));
lengthSortedMap.put("apple", 1);
lengthSortedMap.put("banana", 2);
lengthSortedMap.put("cherry", 3);
// 遍历自定义排序的映射
for (Map.Entry<String, Integer> entry : lengthSortedMap.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}
5. 迭代器
- Iterator:用于遍历集合中的元素。它提供了基本的遍历操作,如
hasNext()
和next()
。
Iterator<String> iterator = someCollection.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
- ListIterator:是Iterator的子接口,专门用于遍历List。它提供了额外的操作,如添加、替换和获取列表中元素的索引。
ListIterator<String> listIterator = someList.iterator();
while (listIterator.hasNext()) {
String element = listIterator.next();
System.out.println(element);
}
// 从后向前遍历
while (listIterator.hasPrevious()) {
String previousElement = listIterator.previous();
System.out.println("Previous: " + previousElement);
}
// 假设我们处于某个元素之前,我们可以添加或设置元素
// listIterator.add("newElement");
// listIterator.set("replacedElement");
异常
1. 异常的概念
- 程序执行过程中遇到的错误或异常情况。
2. 异常的处理
- try-catch语句块捕获并处理异常。
- throw关键字用于抛出异常。
- throws关键字用于声明可能抛出的异常,由调用者处理。
3. 异常的分类
- 运行时异常(RuntimeException):程序运行时发生的异常,如NullPointerException、ArrayIndexOutOfBoundsException等。
- 检查型异常(Checked Exception):编译时必须处理的异常,如IOException、SQLException等。
4. 自定义异常
- 继承自Exception或RuntimeException类,创建自定义异常类。
JDBC
1. JDBC的概念
- Java Database Connectivity,Java数据库连接,用于Java程序与数据库进行交互。
2. JDBC API
- DriverManager:管理JDBC驱动。
- Connection:代表与数据库的连接。
- Statement:执行静态SQL语句并返回结果。
- PreparedStatement:执行预编译的SQL语句,效率更高,且支持参数化查询,防止SQL注入。
- ResultSet:保存查询结果集。
3. JDBC编程步骤
- 加载并注册JDBC驱动。
- 建立数据库连接。
- 创建Statement或PreparedStatement对象。
- 执行SQL语句。
- 处理ResultSet。
- 关闭连接、Statement和ResultSet对象。
首先先新建一个lib目录并导入数据库MySql的jar包
import java.sql.*;
public class Demo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
//DriverManager.registerDriver(new Driver());
String url = "jdbc:mysql://127.0.0.1:3306/gra_stu?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);
//发送sql
Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO book(bname,state) VALUES ('书库西通','已借出')");
statement.close();
connection.close();
}
}
4. JDBC的修改插入和删除
import java.sql.*;
public class Demo1 {
public static void main(String[] args) {
Demo1 demo1 = new Demo1();
/* try {
demo1.save("蔡徐坤","2004-07-28",180, 60, "全能", 1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}*/
Foundation1 foundation1 = new Foundation1();
/*try {
foundation1.save("马嘉祺","2004-01-28",175, 50, "全能", 1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}*/
try {
demo1.delate("科比布莱恩特");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public void save(String player_name,String birth,int height,int weight,String postioning,int team) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/gra_stu?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);
Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO player (player_name,birth,height,weight,postioning,team)" + "VALUE('"+player_name+"','"+birth+"',"+height+","+weight+",'"+postioning+"',"+team+")");
statement.close();
connection.close();
}
public void update(int team,String player_name) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/gra_stu?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);
Statement statement = connection.createStatement();
statement.executeUpdate("UPDATE player SET team = "+team+"WHERE player_name = '"+player_name+"'");
statement.close();
connection.close();
}
public void delate(String player_name) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/gra_stu?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);
Statement statement = connection.createStatement();
statement.executeUpdate("DELETE FROM player WHERE player_name = '"+player_name+"' OR 1=1");
statement.close();
connection.close();
}
}
5. JDBC查询
import sun.net.sdp.SdpSupport;
import java.sql.*;
import java.util.ArrayList;
public class Search extends Foundation1{
public static void main(String[] args) {
Player player = new Player();
Foundation1 foundation1 = new Foundation1();
try {
player = foundation1.findPlayerByNum(31);
System.out.println(player.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
Search search = new Search();
ArrayList<Player> arrayList = new ArrayList<>();
try {
arrayList = search.findPlayerByNum("后卫");
System.out.println(arrayList.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public ArrayList<Player> findPlayerByNum(String postioning) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/gra_stu?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM player WHERE postioning = ?");
preparedStatement.setObject(1, postioning);
ArrayList<Player> arrayList = new ArrayList<Player>();
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
Player player = new Player();
player.setNum(resultSet.getInt("num"));
player.setPlayer_name(resultSet.getString("player_name"));
player.setBirth(resultSet.getString("birth"));
player.setHeight(resultSet.getInt("height"));
player.setWeight(resultSet.getInt("weight"));
player.setTeam(resultSet.getInt("team"));
arrayList.add(player);
}
resultSet.close();
preparedStatement.close();
connection.close();
return arrayList;
}
}