面向对象
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"));//从后向前查的indexofString 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));//不超过这个范围,比如这里不能是100byte[] 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);//发送sqlStatement 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;}
}