JavaSE最新版(二)面向对象、String类、ArrayList

一、类和对象

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.构造方法

  1. 构造方法的名字和类名一样 class Phone{  public Phone(){   }}
  2. 我们定义了有参的构造,系统就不会帮助我们创建无参的构造了
  3. 构造方法是可以重载的
  4. 推荐方式:无论是否使用,都手动补上无参构造方法和带全部参数的构造方法
    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.字符串的比较

  1.  基本数据类型 ==号比较的是数据值   10 == 20

  2. 引用数据类型 ==号比较的是地址值    a="abc"  b = new String("abc")  a==b //false

  3. 所以引用我们用equals区分大小写的比较,不区分大小写equalsIgnoreCase()     s1.equals(s2)

  4. 根据索引返回字符:s1.charAt(索引值),字符串的长度:s1.length()

  5. char类型的比较可以这么写    if ( s1 > 'a' || s1 < 'z' )

3.StringBuilder

  1. 创建StringBuilder对象  不带初始值 StringBuilder sb = new StringBuilder();  带初始值 StringBuilder sb = new StringBuilder("abc");
  2. 添加元素 sb.append(1);   sb.append(true)
  3. sb.reverse();  反转元素
  4. sb.length();  获取长度
  5. sb.toString();  转换为字符串
  6. 链式编程   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.知识点

  1. loop:while(true){ break loop; }  可以指定退出loop这个循环
  2. 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;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值