JAVA学习笔记

记录我的java学习笔记和作业,学习资料来源于黑马程序员。

1、 入门

1.1 day01作业

1、多选题:任何计算机能执行的东西都是程序,下面的内容哪些是程序?

A。操作系统

B。360浏览器

C。安卓app

D。电脑病毒

 答案:ABCD

讲解:
只要是我们人为编写的,都是程序。
计算机中的程序有系统软件还有应用软件。

2、基础概念 

2.1 字面量 

2.2 不同进制 

2.3 数据类型 

 byte的范围需要记住;

2^31 = 2,147,483,648;         2^63 = 9,223,372,036,854,775,808;

boolean为布尔型;

 

 

2.4 命名规则

2.5 录入Scanner 

两套体系不能混用!

2.6 IDEA项目结构

项目-微信;   

模块-通讯录、发现、我等下方内容;   

包(像文件夹)-文字、图片、动画等;   

类-实现的代码。

项目:basic-code;

模块(module):day02-code;

包(package):demo1;

类(class):Helloworld。

2.7 day02作业

1:(选择)下列关于java变量声明那个是错误的:

A . int x = 5;

B. double d = 3.14;

C. char grade = ‘C’;

D. String name = ‘黑马程序员’;

**讲解:D**

**字符串需要用双引号引起来**

2:(选择题)变量名是一个单词或者是一组单词,用来描述一个数据的含义,方便人理解,变量名不能有空格。下面的名字哪些可以是变量名?  

A. mybirthday

B. myname  

C. my name 

D. my birthday

E. 1987.  

F. ”传智播客” 

**讲解:**

**AB正确,其他错误**

**C:不能有空格**

**D:不能有空格**

**E:不能以数字开头**

**F:变量名不能有双引号**

3:(选择题)下面代码哪些是创建一个变量?  

A. int myAge = 18;  

B. myName='传智播客”;

C. myAge = 16;  

D. String myName ; 

**讲解:**

A:正确

B:错误,缺少数据类型,而且数据值也错误

C:错误,缺少数据类型

D:错误,没有赋值 

4:(代码题)变量应该是先声哪后使用,请完成下面代码  

A.声明字符串型变量name  

B.声明字符串型变量birthday

C.声明整数类型变量age  

D.声明float类型变量money 

**讲解:**
A:String name = "尼古拉斯阿玮";
B:String birthday = "9月10日";
C:int age = 18;
D:float money = 999999999.99F;

5:请编写程序,分别定义8种基本数据类型的变量,并打印变量的值。 

public class Test01 {
    public static void main(String[] args) {
        // 定义byte类型变量,值为整数,只要在byte范围即可,byte范围:-128 ~ 127
        byte b = 100;
        System.out.println(b);
        // 定义short类型变量,值为整数,只要在short范围即可
        short s = 12345;
        System.out.println(s);

        // 整数的默认类型就是int类型
        int num = 654321;
        System.out.println(num);

        // 定义long类型的整数,需要在数据的后面加字母(L),大小写不限,建议大写。
        long lo = 123456789L;
        System.out.println(lo);

        // 定义float类型的浮点数,需要在数据的后面加字母(F),大小写不限,建议大写。
        float f = 1.5F;
        System.out.println(f);

        // 浮点型默认类型double
        double d = 123.456;
        System.out.println(d);

        // 布尔型只有两个取值:true和false
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1);
        System.out.println(b2);

        // 定义字符型需要一对英文的单引号包裹,并且只能包含一个字符
        char c = 'a';
        System.out.println(c);

        // 定义字符串型需要一对英文的双引号包裹    

        String str = "中国";
        System.out.println(str);
    }
}

6.将以下内容输出到屏幕上

************************
我的姓名是:张三
我的性别是:男
我的年龄是:18
我的地址是:xx省xx市
我的饭卡余额是:55.55元
************************

public class Test03 {
    public static void main(String[] args) {
        // 姓名
        String name = "张三";
        // 性别
        String gender = "男";
        // 年龄
        int age = 20;
        // 地址
        String address = "美国芝加哥";
        // 余额
        double money = 88.88;

        System.out.println("************************");
        System.out.println("我的姓名是:" + name); // 在输出语句中将变量与字符串拼接
        System.out.println("我的性别是:" + gender);
        System.out.println("我的年龄是:" + age);
        System.out.println("我的地址是:" + address);
        System.out.println("我的饭卡余额是:" + money + "元");
        System.out.println("************************");
    }
}

3、运算符 

3.1 算术运算符

 3.1.1 数值拆分练习

总结的规律:数值 / (想要得到的位数)%10

import java.util.Scanner;

public class sanweishu {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个三位数");
        int number=sc.nextInt();
        int bai=number/100;
        int shi=number/10%10;
        int ge=number%10;
        System.out.println("百位:"+bai);
        System.out.println("十位:"+shi);
        System.out.println("个位:"+ge);
    }
}

 3.2 隐式转换与强制转换

3.2.1 隐式转换 

自动小转大

3.2.2 强制转换

强制转换超过范围就会出错!

3.3 字符串和字符串的加操作 

 * ASCII码表

 需要记住:A——65;a——97;

当 数字与字符相加时,字符对应的ASCII数值参与计算;

当有字符参与计算时,+号起拼接作用。(字符串不能进行 “ - ”,“ * ”,“ / ” 操作)

3.4 自增(++)自减(--)运算符 

3.5 赋值运算符与关系运算符

3.5.1 赋值运算符

注意!存在强制转换! 

 3.5.2 关系运算符

3.5.3 逻辑运算符

异或的有趣记忆法:民政局登记结婚,性别相同不行,不同可以。

3.5.4 短路逻辑运算符

结果与普通的单个逻辑运算符一致,区别在于当左边的表达式能够判断最终结果时,右边就不再参与计算了。

* 练习题 数字6

import java.util.Scanner;

public class number6 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int number1= sc.nextInt();
        System.out.println("请输入第二个整数:");
        int number2= sc.nextInt();
        //用短路逻辑运算符更有效率
        boolean result=(number1==6)||(number2==6)||((number1+number2)%6==0);
        System.out.println(result);
    }
}

3.5.5 三元运算符

关系表达式为真则返回表达式1,假返回表达式2

小tips:ctrl+alt+L自动对齐代码 

3.5.6 原码反码补码

原码:最左边为符号位,0正1负

反码:正数的反码不变;负数在原码的基础上,符号位不变,数值全部取反

补码:正数的补码不变;负数在反码的基础上,加1

在计算机中,数字的存储和运算都以补码形式进行

1个字节8个比特位

简便计算方法:左移一次就是结果×2,右移就是÷2

右移补0和1要与该数的符号位相同,正数补0,负数补1

4、判断与循环

4.1 if

4.2 switch

JDK12以后的新版本可以简化成以下形式:

不需要写break,但仍和传统形示有break的功能相同。这里由于每个case里语句只有一行,所以没有写{ }

合理运用case穿透: 

也可以这样改写:

再次简化:

4.3 for

要注意变量定义的位置!:

写循环时的快捷方式

输入回车就得到下面

4.4 while

4.5 练习题:回文数

package test1;

import java.util.Scanner;

public class huiwenshu {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number= sc.nextInt();
        int temp=number;
        int num=0;
        while (temp!=0){
            int ge=temp%10;//个位数
            temp=temp/10;//去掉个位数
            num=num*10+ge;//倒着拼接数字
        }
        System.out.println(num==number);
    }
}

4.6 练习题:求商和余数

package test1;

import java.util.Scanner;

public class shangheyushu {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入被除数");
        int beichu=sc.nextInt();
        System.out.println("请输入除数");
        int chu=sc.nextInt();
        int num=beichu;
        int shang=0;
        while (num>=chu){
            num=num-chu;
            shang++;
        }
        System.out.println("商为"+shang+",余数为"+num);
    }
}

4.7 do……while

5、循环高级综合练习 

5.1 跳转

break——结束循环;continue——跳出本次循环,继续下次循环。

5.2 练习:逢7过

public class feng7guo {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            if(i%7==0||i%10==7||i/10==7){
                System.out.println("过");
            }else{
                System.out.println(i);
            }
        }
    }
}

5.3 练习:判断是否为质数

5.4 random

6、数组

6.1 静态初始化

数组的长度

快速生成循环:arr.fori

6.2 动态初始化

数组常见问题:访问了不存在的索引,出现索引越界异常

打印时不换行小技巧:去掉println中的ln,后面可以加一个空格作为间隔

6.3 数组的内存图

区别在于一个存储的是真实的数据,一个存储的是地址

6.4 练习题:把数字按大小顺序放入数组序列中

有一个数组,其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。执行效果如下:
请输入一个整数数字:
50
生成的新数组是:12 14 23 45 50 66 68 70 77 90 91
 

package test1;

import java.util.Scanner;

public class insertarr {
    public static void main(String[] args) {
        int[] arr={12,14,23,45,66,68,70,77,90,91};
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要插入的整数");
        int num=sc.nextInt();
        int[] arr1=new int[arr.length+1];
        int i;
        for (i = 0; i < arr1.length; i++) {
            if(arr[i]<num){
                arr1[i]=arr[i];
            }else{
                arr1[i]=num;
                arr1[i+1]=arr[i];
                break;
            }
        }
//        System.out.println(i);
        int j;
        for (j=i+2; j < arr1.length; j++) {
            arr1[j]=arr[j-1];
        }
        for (int i1 = 0; i1 < arr1.length; i1++) {
            System.out.print(arr1[i1]+" ");
        }
    }
}

6.5 二维数组

分行写可读性高

7、方法

7.1 最简单的方法定义与调用

7.2 带参数的方法定义与调用

7.3 带返回值的方法定义与调用

7.4 方法的重载

这里方法名相同,参数也相同,所以不构成重载,重载与否与返回值无关:

方法名相同,参数不同(个数不同),因而构成重载:

虽然满足了方法名相同,参数不同(类型不同)这两个条件,但不在同一个类里,因而不构成重载:

方法名相同,参数不同(顺序不同),因而构成重载。不建议是因为没必要,使用方法时将实参换个顺序即可实现:

比较两整数是否相同:

换行小技巧:System.out.println();         //不打印数据,只换行

7.5 方法的内存

方法被调用以后就会进栈执行,结束后出栈,方法中定义过的变量也随之消失。

7.6 作业练习题:抽奖不重复

一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出
588元的奖金被抽出
10000元的奖金被抽出
1000元的奖金被抽出
2元的奖金被抽出

package test1;

import java.util.Random;

public class choujiang {
    public static void main(String[] args) {
        int[] arr={2,588,888,1000,10000};
        int count=0;
        while (count<5){
            Random r=new Random();
            int index=r.nextInt(5);//0~4
            if(arr[index]!=0){
                System.out.println(arr[index]+"元的奖金被抽出");
                arr[index]=0;
                count++;
            }
        }
    }
}

更简便的方法:

7.7 从代码中抽取方法的快捷键:ctrl+alt+M

①选中需要抽取方法的代码,按上述快捷键②选择接受相同的代码抽取成方法③是否需要用方法替代在代码中,选择替代

7.8  把大写和小写字母放到数组中的代码

7.9 循环拼接字符串的代码

8、综合练习

8.1 数字加密

package test1;

import java.util.Scanner;

public class encode {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int[] arr=new int[4];
        System.out.println("请输入四位密码");
        //输入密码
        for (int i = 0; i < arr.length; i++) {
            arr[i]=sc.nextInt();
        }
        //加密
        int[] arr1=new int[arr.length];
        for (int i = 0; i < arr1.length; i++) {
            arr1[i]=(arr[i]+5)%10;//加5然后模10
//            System.out.println(arr1[i]);
        }
        //翻转
        int[] arr2=new int[arr.length];
        for (int i = 0; i < arr2.length; i++) {
            arr2[i]=arr1[arr1.length-i-1];
            System.out.print(arr2[i]);
        }
    }
}

9、面向对象

9.1 类和对象

举例:

9.2 封装

为了保证数据的安全性,定义变量时用private可以禁止类外访问;用set和get变量方法给变量赋值和提供参数,这里用public

9.3 就近原则和this

上面age是成员变量,下面是局部变量。没有this时就近原则。

为了见名知意

9.4 构造方法

创建对象是new做的

9.5 标准的javabean类 

固定格式(套路):

* 快捷键:

无参构造:

有参构造:

 

set和get方法: 

更快的方法:插件

file-settings:

 全部自动生成

9.6 对象内存图

9.7 基本数据类型和引用数据类型 

引用可以理解为拿别人的空间过来用 

9.8 this的内存原理

9.9 成员和局部

9.10 作业题

定义手机类,手机有品牌(brand),价格(price)和颜色(color)三个属性,有打电话call()和sendMessage()两个功能。

请定义出手机类,类中要有空参、有参构造方法,set/get方法。 

定义测试类,在主方法中使用空参构造创建对象,使用set方法赋值。

调用对象的两个功能,打印效果如下:
正在使用价格为3998元黑色的小米手机打电话....
正在使用价格为3998元黑色的小米手机发短信....

package homework;

public class Phonetest {
    public static void main(String[] args) {
    Phone p=new Phone();
    p.setPrice(3998);
    p.setColor("黑色");
    p.setBrand("小米手机");
    p.call();
    p.message();
    }
}
package homework;

public class Phone {
    private String brand;
    private int price;
    private String color;


    public Phone() {
    }

    public Phone(String brand, int price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

    /**
     * 获取
     * @return brand
     */
    public String getBrand() {
        return brand;
    }

    /**
     * 设置
     * @param brand
     */
    public void setBrand(String brand) {
        this.brand = brand;
    }

    /**
     * 获取
     * @return price
     */
    public int getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(int price) {
        this.price = price;
    }

    /**
     * 获取
     * @return color
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }

    public void call(){
        System.out.println("正在使用价格为"+price+"元"+color+"的"+brand+"打电话");
    }
    public void message(){
        System.out.println("正在使用价格为"+price+"元"+color+"的"+brand+"发短信");
    }
}

 也可以这样赋值:

public class Phonetest {
    public static void main(String[] args) {
    Phone p=new Phone("小米手机",3998,"黑色");
//    p.setPrice(3998);
//    p.setColor("黑色");
//    p.setBrand("小米手机");
    p.call();
    p.message();
    }
}

10、面向对象综合练习

10.1 文字版格斗游戏

package homework;

import java.util.Random;

public class Role {
    private String name;
    private int blood;


    public Role() {
    }

    public Role(String name, int blood) {
        this.name = name;
        this.blood = blood;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }

    public void attack(Role role){
        //随机1-20的伤害
        Random r=new Random();
        int hurt=r.nextInt(20)+1;
        //计算剩余血量
        int remainBlood=role.getBlood()-hurt;
        //血量不能为负数
        remainBlood = (remainBlood < 0) ? 0 : remainBlood;
        //修改挨揍的人的血量
        role.setBlood(remainBlood);
        //this表示方法的调用者,也就是发起攻击的人,传递进来的参数role是挨揍的人
        System.out.println(this.getName()+"打了"+role.getName()+"一拳,造成了"+hurt+"点的伤害,"+role.getName()+"还剩"+remainBlood+"点血");
    }
}
package homework;

public class GameTest {
    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("乔峰KO了鸠摩智");
                break;
            }
            //鸠摩智攻击
            r2.attack(r1);
            if(r1.getBlood()==0){
                System.out.println("鸠摩智KO了乔峰");
                break;
            }
        }
    }
}

 * printf(快捷键souf)

* 游戏升级版

package game;

public class GameTest {
    public static void main(String[] args) {
        //创建角色
        Role r1=new Role("乔峰",100,'男');
        Role r2=new Role("鸠摩智",100,'女');
        //查看容貌
        r1.showinfo();
        r2.showinfo();
        //开始攻击
        while(true){
            //乔峰攻击
            r1.attack(r2);
            if(r2.getBlood()==0){
                System.out.println("乔峰KO了鸠摩智");
                break;
            }
            //鸠摩智攻击
            r2.attack(r1);
            if(r1.getBlood()==0){
                System.out.println("鸠摩智KO了乔峰");
                break;
            }
        }
    }
}
package game;

import java.util.Random;

public class Role {
    private String name;
    private int blood;
    private char gender;
    private String face;

    //容貌描述
    String[] boyfaces= {"风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};
    String[] girlfaces ={"美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹"};


    //attack 攻击描述:
    String[] attacks_desc={
            "%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
            "%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
            "%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
            "%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
            "%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
            "%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"
    };

    //injured 受伤描述:
    String[] injureds_desc={
            "结果%s退了半步,毫发无损",
            "结果给%s造成一处瘀伤",
            "结果一击命中,%s痛得弯下腰",
            "结果%s痛苦地闷哼了一声,显然受了点内伤",
            "结果%s摇摇晃晃,一跤摔倒在地",
            "结果%s脸色一下变得惨白,连退了好几步",
            "结果『轰』的一声,%s口中鲜血狂喷而出",
            "结果%s一声惨叫,像滩软泥般塌了下去"
    };

    public Role() {
    }

    public Role(String name, int blood, char gender) {
        this.name = name;
        this.blood = blood;
        this.gender=gender;
        setFace(gender);
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return blood
     */
    public int getBlood() {
        return blood;
    }

    /**
     * 设置
     * @param blood
     */
    public void setBlood(int blood) {
        this.blood = blood;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getFace() {
        return face;
    }

    public void setFace(char gender) {
        Random r = new Random();
        if(gender=='男'){
            int index=r.nextInt(boyfaces.length);
            this.face = boyfaces[index];
        } else if (gender=='女') {
            int index=r.nextInt(girlfaces.length);
            this.face = girlfaces[index];
        }else{
            this.face="面目狰狞";
        }

    }

    public void showinfo(){
        System.out.println(getName());
        System.out.println(getGender());
        System.out.println(getFace());
    }

    public void attack(Role role){
        Random r=new Random();
        //输出攻击的招式
        int index=r.nextInt(attacks_desc.length);
        System.out.printf(attacks_desc[index],this.name,role.getName());
        System.out.println();
        //随机1-20的伤害
        int hurt=r.nextInt(20)+1;
        //计算剩余血量
        int remainBlood=role.getBlood()-hurt;
        //血量不能为负数
        remainBlood = (remainBlood < 0) ? 0 : remainBlood;
        //修改挨揍的人的血量
        role.setBlood(remainBlood);
//        //this表示方法的调用者,也就是发起攻击的人,传递进来的参数role是挨揍的人
//        System.out.println(this.getName()+"打了"+role.getName()+"一拳,造成了"+hurt+"点的伤害,"+role.getName()+"还剩"+remainBlood+"点血");
        //受伤的文字内容
        if (remainBlood>90){
            System.out.printf(injureds_desc[0],role.getName());
        } else if (remainBlood > 80 && remainBlood <= 90) {
            System.out.printf(injureds_desc[1],role.getName());
        }else if (remainBlood > 70 && remainBlood <= 80) {
            System.out.printf(injureds_desc[2],role.getName());
        }else if (remainBlood > 60 && remainBlood <= 70) {
            System.out.printf(injureds_desc[3],role.getName());
        }else if (remainBlood > 50 && remainBlood <= 60) {
            System.out.printf(injureds_desc[4],role.getName());
        }else if (remainBlood > 30 && remainBlood <= 50) {
            System.out.printf(injureds_desc[5],role.getName());
        }else if (remainBlood > 20 && remainBlood <= 30) {
            System.out.printf(injureds_desc[6],role.getName());
        }else{
            System.out.printf(injureds_desc[7],role.getName());
        }
        System.out.println();
    }
}

 

10.2 对象数组

package homework;

import java.util.Scanner;

public class carTest {
    public static void main(String[] args) {
        car[] arr=new car[3];
        //录入汽车的信息
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            car c=new car();
            System.out.println("请输入汽车品牌");
            c.setBrand(sc.next());
            System.out.println("请输入汽车价格");
            c.setPrice(sc.nextInt());
            System.out.println("请输入汽车颜色");
            c.setColor(sc.next());
            //下面这行是难点,第一次写的时候没想出来
            arr[i]=c;
        }
        //输出汽车的信息
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i].getBrand()+arr[i].getPrice()+arr[i].getColor());
        }
    }
}
package homework;

public class car {
    private String brand;
    private double price;
    private String color;


    public car() {
    }

    public car(String brand, double price, String color) {
        this.brand = brand;
        this.price = price;
        this.color = color;
    }

    /**
     * 获取
     * @return brand
     */
    public String getBrand() {
        return brand;
    }

    /**
     * 设置
     * @param brand
     */
    public void setBrand(String brand) {
        this.brand = brand;
    }

    /**
     * 获取
     * @return price
     */
    public double getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
    }

    /**
     * 获取
     * @return color
     */
    public String getColor() {
        return color;
    }

    /**
     * 设置
     * @param color
     */
    public void setColor(String color) {
        this.color = color;
    }
}

package homework;

public class Student {
    private  int id;
    private  String name;
    private  int age;


    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }
}
package homework;

public class StudentTest {
    public static void main(String[] args) {
        Student[] arr = new Student[3];
        Student s1=new Student(1,"张三",18);
        Student s2=new Student(2,"李四",19);
        Student s3=new Student(3,"王五",20);
        arr[0]=s1;
        arr[1]=s2;
        arr[2]=s3;
        //再添加一个学生变量
        Student s4=new Student(4,"赵六",21);
        //判断唯一性
        boolean flag=contain(arr,s4.getId());
        if(flag){
            System.out.println("此学生id已经存在");
        }else{
            //当id不存在时就进行添加
            //判断数组是否存满
            int count=0;
            for (int i = 0; i < arr.length; i++) {
                if(arr[i]!=null){
                    count++;
                }
            }
            if(arr.length==count){
            //当数组已经存满,需要创建一个新的数组
                Student[] arr1=new Student[arr.length+1];
                for (int i = 0; i < arr.length; i++) {
                    arr1[i]=arr[i];//将数组中的元素复制过去
                }
                arr1[count]=s4;
                printarr(arr1);
            }else{
            //当数组没存满
                arr[count]=s4;
                printarr(arr);
            }
        }
    }
    //唯一性判断
    public static boolean contain(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=null){
                if(arr[i].getId()==id){
                    return true;
                }
            }
        }return false;
    }
    //遍历数组
    public static void printarr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=null){
                Student s=arr[i];
                System.out.println("学号:"+s.getId()+",姓名:"+s.getName()+",年龄:"+s.getAge());
            }
        }
    }
}
package homework;

public class StudentDeleteTest {
    public static void main(String[] args) {
        Student[] arr = new Student[3];
        Student s1=new Student(1,"张三",18);
        Student s2=new Student(2,"李四",19);
        Student s3=new Student(3,"王五",20);
        arr[0]=s1;
        arr[1]=s2;
        arr[2]=s3;
        //再添加一个学生变量
        Student s4=new Student(2,"赵六",21);
        //寻找索引
        int index=findindex(arr,s4.getId());
        if(index>=0){
            //查找到了以后年龄+1后输出
            arr[index].setAge(arr[index].getAge()+1);
            System.out.println(arr[index].getId()+","+arr[index].getName()+","+arr[index].getAge());
            //存在则删除
            arr[index]=null;
            System.out.println("此学生id已经存在,现已删除");
            printarr(arr);  //遍历数组
        }else{
            //当id不存在时
            System.out.println("不存在,删除失败");
        }
    }
    //寻找相同id的索引
    public static int findindex(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            Student s=arr[i];
            if(s.getId()==id){
                return i;
            }
        }return -1;
    }

    //遍历数组
    public static void printarr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=null){
                Student s=arr[i];
                System.out.println("学号:"+s.getId()+",姓名:"+s.getName()+",年龄:"+s.getAge());
            }
        }
    }
}

11、API和API帮助文档

 点击显示—>索引—>查询

12、字符串

12.1 string概述 

* 格式化代码快捷键ctrl+alt+L ,自动生成左边变量接收ctrl+alt+v

* next(), nextInt(), nextDouble() 等方法的区别

当涉及到处理输入时,这些方法通常用于从用户提供的输入中获取下一个值。在Java中,这些方法通常与Scanner类一起使用。

  1. next():

    • next() 方法用于读取下一个以空格分隔的字符串。
    • 例如,如果输入为 "Hello World",那么使用 next() 方法将只读取 "Hello",而不会读取 "World"。
  2. nextInt():

    • nextInt() 方法用于读取下一个整数值。
    • 例如,如果输入为 "123 456",那么使用 nextInt() 方法将读取整数值 123。
  3. nextDouble():

    • nextDouble() 方法用于读取下一个双精度浮点数值。
    • 例如,如果输入为 "3.14 2.71828",那么使用 nextDouble() 方法将读取双精度浮点数值 3.14。

12.2 string构造方法代码实现和内存分析

12.3 字符串的比较

12.4 练习:用户登录

package homework;

import java.util.Scanner;

public class login {
    public static void main(String[] args) {
        String user = "zhangsan";
        String password = "123456";
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入用户名");
            String user1 = sc.next();
            System.out.println("请输入密码");
            String password1 = sc.next();
            if (user.equals(user1) && password.equals(password1)) {
                System.out.println("登录成功");
                break;
            } else if (i<2) {
                System.out.println("登录失败,请重新输入,还有"+(2-i)+"次机会");
            }else{
                System.out.println("登录失败,请联系客服处理");
            }
        }
    }
}

12.5 遍历字符串

 统计大小写字母和数字个数:

* 倒序遍历

 可以自己把length改成i,便于阅读和理解

12.6 字符串拼接和反转 

 * 插入循环快捷键ctrl+alt+t

12.7 练习:金额转换

如2153转换为零佰零拾零万贰仟壹佰伍拾叁元

package homework;

import java.util.Scanner;

public class MoneyConvert {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money;
        //限制金额的位数
        while (true) {
            System.out.println("请输入金额:");
            money = sc.nextInt();
            if (money >= 0 && money <= 9999999) {
                break;
            }
        }
        int ge;
        String money1 = "";
        //转换成中文大写
        while (money!=0) {
            ge = money % 10;
            money=money/10;
            money1 = convert(ge) + money1;
        }
//        System.out.println(money1);
        //补零成7位数
        int count=7-money1.length();
        for (int i = 0; i < count; i++) {
            money1='零'+money1;
        }
//        System.out.println(money1);
        //插入单位
        String money2="";
        char[] s={'佰','拾','万','仟','佰','拾','元'};
        for (int i = 0; i < 7; i++) {
            money2=money2+money1.charAt(i)+s[i];
        }
        System.out.println(money2);
    }

    public static char convert(int ge) {
        char[] str = {'零','壹','贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
        return str[ge];
    }
}

12.8 字符串截取substring、charAt

如果要截取单个字符,可以使用12.5中所述的charAt

12.9 练习:手机号屏蔽

* 查询字符ASCII的小技巧

* 字符型的数字转换成int类型的方法

12.10 字符串替换replace

 12.11 StringBuilder

常用场景:1、字符串拼接;2、字符串反转

链式编程:不需要用变量接收它的结果,可以继续调用其他方法

例如:

12.12 练习:判断是否为对称字符串 

12.13 练习:拼接字符串

package homework;

public class pinjie {
    public static void main(String[] args) {
        int[] str={1,2,3,4,5,6,7};
        String result=IntToString(str);
        System.out.println(result);
    }
    public static String IntToString(int[] str){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for (int i = 0; i < str.length; i++) {
            if(i==str.length-1){
                sb.append(str[i]).append("]");
            }else{
                sb.append(str[i]).append(", ");
            }
        }
        return sb.toString();//StringBuilder是一个容器,因此需要转换成字符串形式返回
    }
}

12.14 StringJoiner 

 

add只能添加字符串类型 

12.15 字符串相关类的底层原理

 * 查询源码快捷键ctrl+n

右上角选择all places

* 常见面试题

 12.16 练习题:转换罗马数字

package homework;

import java.util.Scanner;

public class luoma {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str;
        //输入和判断
        while (true) {
            System.out.println("请输入一个字符串");
            str = sc.next();
            if (CheckStr(str)) {
                break;//符合要求退出循环
            } else {
                System.out.println("不符合要求,请重新输入");
            }
        }
        //转换
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            sb.append(changeLuoma(str.charAt(i)-48));//-48将字符转换成数字
        }
        System.out.println(sb);
    }

    //校验字符是否符合规定
    public static boolean CheckStr(String str) {
        if (str.length() > 9) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }

    //转换成罗马
    public static String changeLuoma(int number) {
        String[] luoma = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ"};
        return luoma[number];
    }
}

12.17 练习题:调整字符串

package homework;

public class changeStr {
    public static void main(String[] args) {
        String strA="abcde";
        String strB="bcdea";
        boolean result=check(strA,strB);
        System.out.println(result);
    }
    //判断是否符合
    public static boolean check(String str1,String str2){
        for (int i = 0; i < str1.length(); i++) {
            str1=rotate(str1);
            if(str1.equals(str2)){
                return true;
            }
        }return false;
    }
    //旋转字符串
    public static String rotate(String str){
        char first=str.charAt(0);
        String end=str.substring(1);
        return end+first;
    }
}

以上是方法1,下面是方法2:

 * 将字符串变成字符数组toCharArray 

 * 利用字符数组创建字符串对象(详见图末尾)

12.18 练习题:键盘输入任意字符串,打乱里面的内容

package homework;

import java.util.Random;
import java.util.Scanner;

public class randomStr {
    public static void main(String[] args) {
        System.out.println("请输入需要打乱的字符串:");
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        //变成字符数组
        char[] arr = str.toCharArray();
        //随机打乱
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int index = r.nextInt(arr.length);
            char temp= arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }
        String result = new String(arr);
        System.out.println(result);
    }
}

12.19 练习题:随机验证码,要求4字母1数字 

package homework;

import java.util.Random;

public class randomYanzheng {
    public static void main(String[] args) {
        char[] arr = new char[52];
        for (int i = 0; i < arr.length; i++) {
            if (i < 26) {//小写字母,强制转换
                arr[i] = (char) (97 + i);
            } else {//大写字母
                arr[i] = (char) (65 + i - 26);
            }
        }
        String YanZheng = "";
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(arr.length);
            YanZheng = YanZheng + arr[index];
        }
        int number=r.nextInt(10);
        YanZheng=YanZheng+number;
//        System.out.println(YanZheng);
        //乱序
        char[] arr1 = YanZheng.toCharArray();
        for (int i = 0; i < arr1.length; i++) {
            int randomIndex=r.nextInt(arr1.length);
            char temp=arr1[i];
            arr1[i]=arr1[randomIndex];
            arr1[randomIndex]=temp;
        }
        String result=new String(arr1);
        System.out.println(result);
    }
}

 

12.20 练习题:将两个内容为非负数字的字符串相乘,结果返回字符串 

package homework;

public class StringToNum {
    public static void main(String[] args) {
        String num1 = "12345";
        String num2 = "67890";
        char[] arr1 = num1.toCharArray();
        char[] arr2 = num2.toCharArray();
        int number1 = 0;
        int number2 = 0;
        for (int i = 0; i < arr1.length; i++) {
            int ge = arr1[i] - 48;
            number1 = number1 * 10 + ge;
        }
        for (int i = 0; i < arr2.length; i++) {
            int ge = arr2[i] - 48;
            number2 = number2 * 10 + ge;
        }
        int resultNum = number1 * number2;
        String result = resultNum + "";
        System.out.println(result);
    }
}

 12.21 练习题:返回字符串中最后一个单词的长度

package homework;

public class LastWordLength {
    public static void main(String[] args) {
        String arr="fly me to the moon";
        char[] arr1=arr.toCharArray();
        int count=0;
        for (int i = arr1.length-1; i >= 0; i--) {
            if(arr1[i]!=' '){
                count++;
            }else{
                break;
            }
        }
        System.out.println("最后一个单词的长度为"+count);
    }
}

12.22 练习题:统计字符串中英文字母和数字分别有多少个

package StringHomework;

import java.util.Scanner;

public class CountLetterNum {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        line = line.toLowerCase();      // 为方便统计,将字符串中的字母都转为小写
        int Letcount = 0;
        int NumCount = 0;
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);
            if (c>='a'&&c<='z'){
                Letcount++;
            } else if (c>='0'&&c<='9') {
                NumCount++;
            }
        }
        System.out.println("字母:"+Letcount+"个");
        System.out.println("数字:"+NumCount+"个");
    }
}

 

12.23 练习题:判断一个字符串是否是对称的字符串

package StringHomework;

public class HuiwenString {
    public static void main(String[] args) {
        String str="上海自来水来自海上";
        System.out.println(check(str));
    }
    public static boolean check(String str){
        if(str==null){
            return false;
        }
        StringBuilder sb=new StringBuilder(str);
        String str1=sb.reverse().toString();
        return str1.equals(str);
    }
}

 

12.24 练习题:判断用户输入的身份证号码是否合法

 规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。

package StringHomework;

import java.util.Scanner;

public class CheckIDCard {
    public static void main(String[] args) {
        System.out.println("请输入身份证号:");
        Scanner sc=new Scanner(System.in);
        String ID=sc.next();
        System.out.println(check(ID));
    }
    public static boolean check(String str){
        if(str==null){
            return false;
        }
        if(str.length()!=18){
            return false;
        }
        if(str.charAt(0)=='0'){
            return false;
        }
        for (int i = 0; i < str.length()-1; i++) {
            char c=str.charAt(i);//前17位
                if(c<'0'||c>'9'){
                    return false;
                }
        }
        if(str.charAt(17)=='X'||(str.charAt(17)>='0'&&str.charAt(17)<='9')){
            return true;
        }else{
            return false;
        }
    }
}

12.25 练习题:统计该文本中"Java"一词出现的次数 

public class Test {
    public static void main(String[] args) {
        String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        String tar = "Java";
        // 调用方法并输出
        System.out.println(search(str, tar));

    }
    // 返回值int表示次数,参数列表str表示在哪个字符串中查找,tar表示要查找的目标子串
    public static int search(String str, String tar) {
        // 定义统计变量表示次数
        int count = 0;
        // 定义索引变量,表示每次找到子串出现的索引
        int index = -1;
        // 定义循环,判断条件为在字符串中找到了目标子串
        while ((index = str.indexOf(tar)) != -1) { // 将找到的索引赋值给变量并判断
            // 次数累加
            count++;
            // 把查找过的部分剪切掉,从找到的索引+子串长度的位置开始截取。
            str = str.substring(index + tar.length());
        }
        return count;
    }
}
public class Test {
    public static void main(String[] args) {
        String str = "Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        String tar = "Java";
        // 调用方法并输出
        System.out.println(search(str, tar));

    }

    // 替换之后求长度差
    public static int search(String str, String tar) {
        String newStr = str.replace(tar, "");
        int count = (str.length() - newStr.length()) / tar.length();
        return count;

    }
}

 13、集合

13.1 集合的基本使用 

 13.2 添加字符串和整数并遍历

* 基本数据类型对应的包装类

要想在集合中放基本数据类型,需要改为包装类

 13.3 添加学生对象并遍历的两个练习

package listPractice;

import java.util.ArrayList;

public class bianliStudent {
    public static void main(String[] args) {
        ArrayList<Student> list=new ArrayList<>();
        Student stu1=new Student("张三",18);
        Student stu2=new Student("李四",19);
        Student stu3=new Student("王五",20);
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        for (int i = 0; i < list.size(); i++) {
            Student s=list.get(i);
            System.out.println("姓名:"+s.getName()+", 年龄:"+s.getAge());
        }
    }


}
package listPractice;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

改成手动录入:

package listPractice;

import java.util.ArrayList;
import java.util.Scanner;

public class bianliStudent1 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            Student stu=new Student();
            System.out.println("请输入姓名:");
            String name=sc.next();
            System.out.println("请输入年龄:");
            int age=sc.nextInt();
            //传递参数
            stu.setName(name);
            stu.setAge(age);
            //放到集合里
            list.add(stu);
        }

        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println("姓名:" + s.getName() + ", 年龄:" + s.getAge());
        }
    }


}

 

13.4 练习题:寻找该学生对象名是否存在

package listPractice;

import java.util.ArrayList;

public class CheckContain {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        Student stu1 = new Student("张三", 18);
        Student stu2 = new Student("李四", 19);
        Student stu3 = new Student("王五", 20);
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        boolean result = check(list, "张三");
        System.out.println(result);
    }

    public static boolean check(ArrayList<Student> list, String name) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getName().equals(name)) {
                return true;
            }
        }
        return false;
    }
}

 结果为true

13.5 练习题:筛选手机信息

判断的方法:

 主函数里调用方法:

 13.6 项目练习:学生管理系统

package Manage;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentManage {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        loop:
        while (true) {
            System.out.println("-----------欢迎来到学生管理系统-----------");
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出");
            System.out.println("请输入你的选择:");
            Scanner sc = new Scanner(System.in);
            String choice = sc.next();
            switch (choice) {
                case "1" -> {
                    System.out.println("请输入要添加的学生id");
                    String id = sc.next();
                    addStudent(list, id);
                }
                case "2" -> {
                    System.out.println("请输入要删除的学生id");
                    String id = sc.next();
                    deleteStudent(list, id);
                }
                case "3" -> {
                    System.out.println("请输入要修改的学生id");
                    String id = sc.next();
                    reviseStudent(list, id);
                }
                case "4" -> {
                    System.out.println("请输入要查询的学生id");
                    String id = sc.next();
                    searchStudent(list, id);
                }
                case "5" -> {
                    System.out.println("退出");
                    break loop;
                }
                default -> System.out.println("没有这个选项,请重新输入");
            }
        }
    }

    //添加学生
    public static void addStudent(ArrayList<Student> list, String id) {
        //判断id是否已经存在
        //如果存在
        if (contain(list, id)) {
            System.out.println("当前id已存在");
        } else {//不存在
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入姓名:");
            String name = sc.next();
            System.out.println("请输入年龄:");
            int age = sc.nextInt();
            System.out.println("请输入地址:");
            String address = sc.next();
            Student s = new Student(id, name, age, address);
            list.add(s);
        }
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> list, String id) {
        int index = containIndex(list, id);
        if (index == -1) {//当前id不存在
            System.out.println("当前id不存在");
        }else{
            list.remove(index);
            System.out.println("删除成功");
        }
    }//修改学生

    public static void reviseStudent(ArrayList<Student> list, String id) {
        int index = containIndex(list, id);
        if (index == -1) {//当前id不存在
            System.out.println("当前id不存在");
        }else{
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入新姓名:");
            String newName=sc.next();
            list.get(index).setName(newName);
            System.out.println("请输入新年龄:");
            int newAge=sc.nextInt();
            list.get(index).setAge(newAge);
            System.out.println("请输入新地址:");
            String newAddress=sc.next();
            list.get(index).setAddress(newAddress);
        }
    }//查询学生

    public static void searchStudent(ArrayList<Student> list, String id) {
        int index = containIndex(list, id);
        //如果存在
        if (index > -1) {
            System.out.println("id:" + list.get(index).getId() + "\t姓名:" + list.get(index).getName() + "\t年龄:" + list.get(index).getAge() + "\t地址:" + list.get(index).getAddress());
        }else{
            System.out.println("当前学生id不存在");
        }
    }

    //是否存在
    public static boolean contain(ArrayList<Student> list, String id) {
        return containIndex(list, id) > -1;
    }

    //是否存在,返回索引
    public static int containIndex(ArrayList<Student> list, String id) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getId().equals(id)) {
                return i;
            }
        }
        return -1;
    }
}

鼠标点击后ALT+回车自动创建方法 

* startwith

14、面向对象进阶

14.1 static静态变量

 14.2 静态方法和工具类

 

静态方法写好以后可以调用,哪个包需要就粘贴过去用 

14.3 static的注意事项

 

 这里的name会报错,因为name不是静态变量

show方法不是静态,会报错 

* main方法

14.4 继承的概述

java三大特性:封装、继承、多态

14.5 继承的特点与继承体系的设计

 

 

 

后面都类似,不列举了

14.6 子类到底能继承父类的哪些内容

 

 14.7 继承中成员方法和成员变量访问的特点

* 重写

 

 

 14.8 继承中的构造方法和this、supper关键字

14.9 认识多态

 

14.10 多态中调用成员的特点

 14.11 多态的优势和弊端

elseif里面的狗改为猫

14.12 包和final

14.13 权限修饰符和代码块

14.14 抽象类和抽象方法

 

14.15 接口

 

14.16 内部类

15、常用API

 

* 练习题:找出文本中所有的JAVAXX

 

15.1 JDK7时间

15.2 包装类

16、常见算法

16.1 查找

16.2 排序

16.3 递归

16.4 Arrays

16.5 lambda

17 集合进阶

快捷键:

18 双列集合、map

19 方法引用

20 异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值