一、类和对象
1.定义
- 用来描述一类事物的类,专业叫做:javabean类。在javabean类中,是不写main方法的
- 在以前可以在测试类中创建javabean类的对象并进行赋值调用
public class HelloWorld {
public static void main(String[] args) {
Phone p = new Phone();
p.name = "iphone";
System.out.println(p.name);
p.call();
}
}
public class Phone {
String name;
public void call(){
System.out.println("我可以用来打电话");
}
}
public class 类名{
1、成员变量(代表属性)
2、成员方法(代表行为)
}
类名的首字母建议大写,需要见名知意,驼峰模式
一个java文件中可以定义多个class类,且只能一个类是public修饰,且public修饰的类名需要和文件名一样,实际开发中建议还是一个文件定义一个class类。
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;一般无需指定初始化值,存在默认值
byte short int long ==== 0
float double ===== 0.0
boolean ==== false
类、接口、数组、string ==== null
二、封装
1.定义:人关门===>关门的方法是写在门身上 人画圆===>画圆的方法写在圆身上
对象代表什么,就得封装对应的数据,并且提供数据对应的行为
2.private关键字
public class HelloWorld {
public static void main(String[] args) {
Phone p = new Phone();
p.setMoney(-1);
}
}
public class Phone {
private String name;
private int money;
public void setName(String n) {
name = n;
}
public String getName(){
return name;
}
public void setMoney(int m){
if(m >0){
money = m;
}else{
System.out.println("非法参数");
}
}
public int getMoney() {
return money;
}
}
3.this关键字就近原则
(1)成员变量
定义在类方法的外面的变量是成员变量
(2)局部变量
定义在类方法里面的内部的是局部变量
(3)就近原则:
谁离我近,我就用谁。当局部变量与成员变量同名时,谁离得近就是指谁。
public int age;
public void method(){
int age =10;
System.out.println(age); //谁离我近,我就用谁
System.out.println(this.age);
}
System.out.println(age)先看局部有没有,没有去成员变量找
System.out.println(this.age)直接去找成员变量
this的作用?可以区别成员变量和局部变量
4.构造方法
- 构造方法的名字和类名一样 class Phone{ public Phone(){ }}
- 我们定义了有参的构造,系统就不会帮助我们创建无参的构造了
- 构造方法是可以重载的
- 推荐方式:无论是否使用,都手动补上无参构造方法和带全部参数的构造方法
public static void main(String[] args) {
Phone p = new Phone(123);
}
public class Phone {
private int money;
public Phone(int money){ //构造方法
System.out.println("我被调用了");
}
}
5.JavaBean类
快速生成:alt+insert 插件:右键ptg to javabean自动生成
public class User {
private String username;
private String password;
private String email;
private String gender;
private int age;
//空参
public User(){}
//带全部参数的构造
public User(String username,String password,String email,String gender,int age){
this.username = username;
this.password = password;
this.email = email;
this.gender = gender;
this.age = age;
}
//get和set方法
public void setUsername(String username){
this.username = username;
}
public String getUsername(){
return this.username;
}
}
6.局部变量与成员变量的区别
成员变量:类中方法外的变量,有初始值
局部变量:方法中的变量,还有新参都是局部变量,没有初始值
三、面向对象综合案例
文字格斗游戏
public static void main(String[] args) {
Role r1 = new Role("乔峰",100);
Role r2 = new Role("鸠摩智",100);
//开始格斗回合制游戏
while (true){
r1.attack(r2);
if(r2.getBlood() == 0){
System.out.println(r1.getName()+"K.O"+r2.getName());
break;
}
r2.attack(r1);
if(r1.getBlood() == 0){
System.out.println(r2.getName()+"K.O"+r1.getName());
break;
}
}
}
public class Role {
private String name;
private int blood;
public Role() {
}
public Role(String name, int blood) {
this.name = name;
this.blood = blood;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
//定义一个方法可以攻击别人
//思考谁攻击了谁
//Role r1 = new Role();
//Role r2 = new Role();
public void attack(Role role){
//计算造成的伤害
Random random = new Random();
int hurt = random.nextInt(20)+1;
//修改挨揍人的血量
int remainBlood = role.getBlood()-hurt;
//对剩余血量做一个验证
remainBlood = remainBlood <0?0:remainBlood;
role.setBlood(remainBlood);
System.out.println(this.getName()+"攻击了"+role.getName()+
hurt+"血"+role.getName()+"还剩下"+remainBlood+"血");
}
}
四、字符串
1.创建方式
- 直接赋值:String name="Helloworld" (常用)
- new对象:String name = new String()
2.字符串的比较
-
基本数据类型 ==号比较的是数据值 10 == 20
-
引用数据类型 ==号比较的是地址值 a="abc" b = new String("abc") a==b //false
-
所以引用我们用equals区分大小写的比较,不区分大小写equalsIgnoreCase() s1.equals(s2)
-
根据索引返回字符:s1.charAt(索引值),字符串的长度:s1.length()
-
char类型的比较可以这么写 if ( s1 > 'a' || s1 < 'z' )
3.StringBuilder
- 创建StringBuilder对象 不带初始值 StringBuilder sb = new StringBuilder(); 带初始值 StringBuilder sb = new StringBuilder("abc");
- 添加元素 sb.append(1); sb.append(true)
- sb.reverse(); 反转元素
- sb.length(); 获取长度
- sb.toString(); 转换为字符串
- 链式编程 sb.append(1).append(true)
4.StringJoiner
StringJoiner sj1= new StringJoiner("---"); 只指定中间
StringJoiner sj = new StringJoiner("---","[","]"); 指定开头,结尾,中间
sj.add("a"); 添加
sj.length(); 长度
sj.toString(); 转字符串
五、集合
1.定义
自动扩容,可长可短,只能存储引用数据,基本数据需要包装类
2.ArrayList
byte===>Byte short====>Short char===>Characer int==>Integer long==>Long float===>Float double=>Double boolean===>Boolean
// <>括号里面写的是泛型
// ArrayList<String> arrayList = new ArrayList<String>(); JDK7写法
ArrayList<String> arrayList = new ArrayList<>();
ArrayList<Integer> arrayList1 = new ArrayList<>(); //int
arrayList.add("你好"); //添加元素
arrayList.add("世界"); //删除元素
arrayList.remove("世界"); //删除元素 boolean
arrayList.remove(0); //删除元素 返回被删数
arrayList.add("你好"); //添加元素
arrayList.set(0,"我很好");
String a = arrayList.get(0);
int b = arrayList.size();
System.out.println(arrayList);
System.out.println(a);
System.out.println(b);
六、图书管理系统(综合测试)
1.知识点
- loop:while(true){ break loop; } 可以指定退出loop这个循环
- system.exit() 直接退出程序
package com.itheima.demo1;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringJoiner;
public class HelloWorld {
public static void main(String[] args) {
ArrayList<Student> arrayList = new ArrayList<>();
loop:
while (true) {
System.out.println("----------------------------欢迎来到黑马学生管理系统----------------------------");
System.out.println("1:添加学生");
System.out.println("4:查询学生");
System.out.println("5:退出");
System.out.println("请输入你的选择");
Scanner scanner = new Scanner(System.in);
String choose = scanner.next();
switch (choose) {
case "1" -> addStudent(arrayList);
case "4" -> queryStudent(arrayList);
case "5" -> {
System.out.println("退出");
break loop;
}
default -> System.out.println("没有这个选项");
}
}
}
// 添加学生
public static void addStudent(ArrayList<Student> arrayList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的id");
String id = sc.next();
System.out.println("请输入学生的姓名");
String name =sc.next();
System.out.println("请输入学生的年龄");
int age = sc.nextInt();
System.out.println("请输入学生的地址");
String address = sc.next();
Student stu = new Student(id,name,age,address);
arrayList.add(stu);
System.out.println("学生添加成功");
}
// 查询学生
public static void queryStudent(ArrayList<Student> arrayList) {
if(arrayList.size() == 0){
System.out.println("当前无学生请等等再查");
// 结束方法
return;
}
System.out.println("id\t\t姓名\t年龄\t家庭住址");
for (int i = 0; i < arrayList.size(); i++) {
Student stu = arrayList.get(i);
System.out.println(stu.getId()+'\t'+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
}
}
}
//创建学生类
class Student {
private String id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}