1.Java中的API
1.1 Java API概述
Java API(Application Programming Interface,应用程序编程接口)是Java开发者用来访问Java运行环境的接口。Java API包含了Java运行环境提供的各种功能,包括基础类库、核心类库、扩展类库、第三方类库等。Java API的设计目标是提供一套统一的、易于使用的API,使得开发者可以快速、方便地开发出功能丰富、可靠的Java程序。
Java API的主要组成部分包括:
- 基础类库:Java API的基础类库包含了Java运行环境提供的最基本的类和接口,包括用于输入/输出、网络通信、多线程、日期和时间、文件系统、数据库访问、XML处理、加密、压缩、日志记录、单元测试等功能的类和接口。
- 核心类库:Java API的核心类库包含了Java运行环境提供的高级功能类和接口,包括集合类、多线程类、网络通信类、数据库访问类、XML处理类、加密类、压缩类、日志记录类、单元测试类等。
- 扩展类库:Java API的扩展类库包含了Java运行环境提供的扩展功能类和接口,包括JavaBeans、JavaMail、Java Activation Framework、Java Cryptography Extension、Java Image I/O、Java Naming and Directory Interface、Java Plug-in、Java Print Service、Java Transaction API、Java Web Services、Java XML Binding等。
- 第三方类库:Java API的第三方类库包含了Java开发者通过第三方提供的类和接口,包括Apache、Eclipse、Google、JBoss、Spring等。
Java API的设计理念是面向对象、可扩展性、健壮性、安全性、可移植性和可靠性。Java API的设计目标是提供一套统一的、易于使用的API,使得开发者可以快速、方便地开发出功能丰富、可靠的Java程序。
1.2 Java API的使用
Java API的使用主要分为以下几步:
- 导入Java API:在Java程序中,需要导入Java API才能调用其提供的功能。导入Java API的方法有两种:
- 直接导入:直接导入Java API的jar文件,在项目的build path中添加jar文件。
- 间接导入:间接导入Java API的jar文件,在项目的build path中添加依赖管理工具(如Maven、Gradle)并在pom.xml或build.gradle文件中添加依赖。
- 调用Java API:调用Java API的方法有两种:
- 直接调用:直接调用Java API的类和接口。
- 间接调用:间接调用Java API的类和接口,通过类的实例、类的方法、类中的静态方法等。
具体调用方法为:
1.先创建package,再创建类;
2.直接创建类,名字为包名.类名;
对比c++,包类似于头文件库,类类似于头文件库中的函数。
1.3 使用例子
import java.util.Scanner;
public class HelloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.printf("请输入您的名字:");
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
}
}
随机数生成
import java.util.Random;
public class RandomNumber {
public static void main(String[] args) {
Random random = new Random();
int number = random.nextInt(100);
//100以内的随机数,包括0,不包括100的整数
System.out.println("随机数:" + number);
}
}
1.4 常见API
- Scanner类:用于从控制台读取输入,并将其转换为字符串。
- Random类:用于生成随机数。
- String类:用于操作字符串。
char []chars = {'a','b','c'};
byte []bytes = {97,98,99};
String str = new String(chars);
String str2 = new String(bytes);
String str3 = "abc";
//注意,str!=str2,str2!=str3,字符串比较String比较的是地址,而不是内容。
练习:实现猜数字的小游戏
import java.util.Random;
import java.util.Scanner;
public class GuessNumber {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("========================");
System.out.println("=========猜数字==========");
System.out.print("请输入生成的随机数的范围:0~");
int num = sc.nextInt();
Random r = new Random();
int ans = r.nextInt(num);
boolean flag=false;
while(!flag){
System.out.print("请输入你要猜的数字:");
num=sc.nextInt();
if(ans==num){
flag=true;
System.out.println("恭喜您,猜对了!");
}
else if(ans>num){
System.out.println("猜小了");
}
else{
System.out.println("猜大了");
}
}
}
}
2.注释与注解
2.1 注释
//单行注释
/*
多行注释
*/
注释是用来解释代码的,对代码的功能、实现原理、使用方法等进行说明。注释是程序员用来解释代码的一种方式,可以帮助程序员更好地理解代码。
2.2 注解
@Override//重载注解
@Deprecated//废弃注解
@SuppressWarnings("unchecked")//抑制警告注解
public void method() {
//...
}
注解允许在代码中嵌入元数据。元数据是数据的数据,它是关于数据的数据。注解可以用来提供信息给编译器、运行时环境或其他工具,这些信息可以用于生成代码、做一些额外的处理等。
3.集合
3.1 创建集合对象
//创建集合对象
List<String> list = new ArrayList<>();
//String是集合的类型,即泛型
Set<String> set = new HashSet<>();
Map<String, Integer> map = new HashMap<>();
3.2 集合的基本操作
//添加元素
list.add("apple");
set.add("banana");
map.put("orange", 10);
//获取元素
String fruit = list.get(0);
Integer price = map.get("orange");
//删除元素
list.remove(0);
set.remove("banana");
map.remove("orange");
//判断元素是否存在
if(list.contains("apple")){
//...
}
if(map.containsKey("orange")){
//...
}
//遍历集合
for(String fruit : list){
//...
}
for(Map.Entry<String, Integer> entry : map.entrySet()){
//...
}
练习:皇家赌场:猜数字和赌大小
import java.util.Random;
import java.util.Scanner;
public class Homework {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("===================================");
System.out.println("欢迎来到皇家赌场!\n赌场规则:\n1. 玩家可以选择猜数字或赌大小。\n2. 在赌大小中,玩家可以下注。\n3. 在猜数字中,若猜对玩家则获得100元,若猜错则输掉10元。\n4. 玩家可以选择继续玩或者退出游戏。");
while(true){
System.out.println("猜数字or赌大小or退出游戏?(1/2/3)");
int choice = sc.nextInt();
if(choice == 1){
guessNumber();
}else if(choice == 2) {
betSize();
}else
{
System.out.println("欢迎下次光临!");
break;
}
}
}
public static void guessNumber(){
System.out.println("-----------------------");
System.out.print("请输入1~6之间的数字:");
int num = sc.nextInt();
Random random = new Random();
int ans = random.nextInt(5) + 1;
if(num == ans){
System.out.println("恭喜您,猜对了!\n您获得100元!");
}else {
System.out.println("很遗憾,猜错了!\n您输掉了10元!");
}
}
public static void betSize(){
Scanner sc = new Scanner(System.in);
System.out.println("-----------------------");
System.out.print("请输入您要下注的金额:");
long money = sc.nextLong();
Random random = new Random();
int size = random.nextInt(5) + 1;
System.out.println("请问您是赌大还是赌小?(1/2)");
int choice2 = sc.nextInt();
if(choice2 == 1&& size > 3){
System.out.println("恭喜您,赢了!\n您赢得了"+money*(random.nextInt(2)+1)+"元");
}else if(choice2 == 2&& size < 4){
System.out.println("恭喜您,赢了!\n您赢得了"+money*(random.nextInt(2)+1)+"元");
}else{
System.out.println("很遗憾,输了!\n您失去了"+money+"元");
}
}
}
练习:生成一个含有十个不同随机数的数组
import java.util.Random;
public class RandomArray {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
int num = random.nextInt(100);
while(isContain(arr,num)){
num = random.nextInt(100);
}
arr[i] = num;
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i] + " ");
}
}
}
练习:给一串字符串,判断大写字母、小写字母、数字、其他字符的个数。
import java.util.Scanner;
public class CountChar {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入字符串:");
String str = sc.nextLine();
int upper = 0, lower = 0, digit = 0, other = 0;
for(int i=0;i<str.length();i++){
char ch = str.charAt(i);
if(Character.isUpperCase(ch)){
upper++;
}else if(Character.isLowerCase(ch)){
lower++;
}else if(Character.isDigit(ch)){
digit++;
}else{
other++;
}
System.out.println("大写字母:" + upper);
System.out.println("小写字母:" + lower);
System.out.println("数字:" + digit);
System.out.println("其他字符:" + other);
}
}
练习:学生管理系统,要求增删改学生信息和列表查询
4.类与对象
4.1 对象
对象是类的实例,是程序运行时创建的实例。对象包含了数据和方法。万事万物皆为对象。
4.2 类
类是对象的模板,是创建对象的蓝图。类包含了数据成员(字段)、方法成员(函数)、构造方法、静态成员(类变量)、常量成员(常量)等。
4.3 方法
方法是类中定义的函数,是类的行为。方法可以访问类的成员变量和其他方法。
4.4 构造函数
构造函数是类的特殊方法,它在对象创建时调用,用来初始化对象。示例代码:
public class Person {
private String name;
private int age;
public Person(String name, int age) {//有参构造函数
this.name = name;
this.age = age;
}
public Person() {//无参构造函数
this.name = "unknown";
this.age = 0;
}
}
- 构造函数的名称必须与类名相同。
- 构造函数没有返回值,但可以返回对象。
- 构造函数可以有参数,参数类型必须与类成员变量类型一致。
- 构造函数可以调用其他构造函数。
- 构造函数的作用是初始化对象,所以构造函数不能有返回值。
4.5 函数抽象
函数抽象是指将一个复杂的过程分解为多个步骤,每个步骤都有明确的输入和输出,这样就可以用函数来表示。
4.6 面向对象-多态
多态是指具有不同功能的对象对同一消息作出不同的响应。多态是面向对象编程的重要特征。
示例:
public class Animal {
public void eat() {
System.out.println("动物吃东西");
}
}
public class Dog extends Animal {
public void eat() {
System.out.println("狗吃骨头");
}
}
public class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
Cat cat = new Cat();
animal.eat();
dog.eat();
cat.eat();
}
}
输出:
动物吃东西
狗吃骨头
猫吃鱼
不同的类的调用
具体类: father类 对象= new 子类对象;
抽象类: 不能实例化,只能被继承。
抽象方法定义
格式:
修饰符 abstract 返回值 形参列表();
4.7 接口
- 接口是高度抽象的,所有接口中全部是抽象方法
- 高版本的Java中,接口可以定义具体的实现方法
- 接口是定义规范
- 接口实现的关键字:
implements