java面向对象基础

面向对象之离散知识点合计

1. 面向对象的基本概念

1. 概念理解

以树结构去理解,每上一层root分支视为class,下层结构则是它的三要素:封装、继承、多态;值得注意的是,下层结构是对上层结构的改写,有利于代码的扩展性;这里,如果您觉得树结构帮助不到您,那使用超市的货架会有很大作用。

2. class调用

2.1 创建对象

调用时,首先你要有一个对象,没有怎么办?new一个就可以了
类似于Person p = new Person();格式即可
总结下来就是:类名 对象名 = new 类名();

2.2 使用对象

区分成员变量和成员方法

2.2.1使用成员变量

使用成员变量,类似p.brand;
格式就是:对象名.变量名

2.2.2 使用成员方法

形如p.call();
格式:对象名.方法名();

2.3 举例说明

package com.demo1;

public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone();

        p.Brand = "IPhone";
        p.price = 5999.00;

        //使用成员变量
        String brand = p.Brand;
        Double price =p.price;
        System.out.println(brand);
        System.out.println(price);
        /**System.out.println(p.Brand);
         System.out.println(p.price);*/

        //使用成员方法
        p.call();


    }
}

class Phone{
    //成员变量
    double price;
    String Brand;
    //成员方法
    void call(){
        System.out.println("打电话");
    }
}
//结果展示
IPhone
5999.0
打电话


3. 内存图

这里从程序执行过程描述;包含四大块:堆、栈、data segment、code segment

3.1程序执行过程

3.2 内存结构描述

这里有写的比较好的;引荐一下内存图概念描述JVM内存示意图JVM内存结构,我就不写了,自己动手画一画,一遍就足够理解

4. 变量

4.1 局部变量与成员变量

这个总结下来就是一句话,看括号,括号即作用域。

5. 封装

5.1 private关键字

权限修饰符这里可以参见查看第四条
a.是一个权限修饰符
b.可以修饰成员(成员变量和成员方法)
c.作用是保护成员不被别的类使用,被private修饰的成员只有在本类中才能访问
d.如果其他类需要访问被private修饰的成员变量,可以使用getter,setter方法。具体格式为get变量名();set变量名(参数);使用public修饰。

tip:idea中getter,setter快捷键:alt+insert

譬如:
创建一个被private修饰的成员变量的类

package com.demo2;

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

    public void setAge(int age) {
        //可以在类中加入判断
        if (age<0 || age>200){
            System.out.println("请输入正确年龄:");
        }else
            this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}

然后去调用

package com.demo2;

public class PrivateDemo {
    public static void main(String[] args) {

        person p = new person();
        p.setAge(12);
        p.setName("bob");
        System.out.println(p.getAge() + "," + p.getName());
    }
}

输出结果

//传值12,bob
12,bob
//传值-12,bob
0,bob//注意这里0是age(int)类型的默认值

5.2 this关键字

这个其实上边getter,setter已经用到了,使用时注意一点就可以了,那就是this指代的是成员变量,this.name=name中,this.name是成员变量中的name,而后边的name 是局部变量的name。可以引荐this关键字小结

简单描述----来自黑马教程
1.this指代的变量是成员变量
2.什么时候使用this?解决局部变量隐藏成员变量
3.this代表所在类的对象引用。方法被哪个对象调用,this就指代哪个对象。

5.3 this内存原理

3.2内存结构
方法

6. 构造函数

是一种特殊的方法,用于创建对象

 //格式
 public class 类名 {
     修饰符 类名(参数)
}

在这里插入图片描述

package com.test01;

public class Student {
    String name;
    int age;

    //构造方法
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }

    public void show(){
        System.out.println("name:"+name+","+"age:"+age);
    }
}

package com.test01;
/*测试类
* */

public class demo01 {
    public static void main(String[] args) {
        Student s = new Student("liqingxia",14);
        s.show();
    }
}

//结果展示
name:liqingxia,age:14

注意事项:1.如果没有构造方法,系统将采用默认的构造方法,类似于public student(){};如果定义了,就采用构造的
2.构造方法可以重载,根据需要的参数编写

7. API 文档

SE7API;JDK16;SE8API;中文官网地址

8. 快捷键

idea快键键ctrl+alt+v自动生成编码格式,自动补全
ctrl+alt+L规范格式
alt+insert setter/getter方法

9. String

9.1 String 练习之用户登录

package com.demo1.tst01;
//模拟用户登录

import java.util.Scanner;

public class login {
    public static void main(String[] args) {
        String username = "ab";
        String password = "1234";
        
        for (int i = 0; i < 3; i++) {
            //调用scanner
            Scanner s = new Scanner(System.in);
            System.out.println("请输入账号:");
            String s1 = s.nextLine();

            System.out.println("请输入密码:");
            String s2 = s.nextLine();

            if (s1.equals(username) && s2.equals(password)) {
                System.out.println("登陆成功");
                break;//这里break很重要哦!
            } else {
                if (2 - i == 0) {
                    System.out.println("您的账户被锁定");
                    //i,0,1,2
                    //次数:  2,1,0
                } else
                    System.out.println("账号或者密码输入错误,请重新输入!");
                System.out.println("您还有" + (2 - i) + "次机会");
            }
        }
    }
}

//结果展示
请输入账号:
13
请输入密码:
13
账号或者密码输入错误,请重新输入!
您还有2次机会
请输入账号:
13
请输入密码:
13
账号或者密码输入错误,请重新输入!
您还有1次机会
请输入账号:
13
请输入密码:
13
您的账户被锁定
您还有0次机会

//
请输入账号:
aa
请输入密码:
aa
账号或者密码输入错误,请重新输入!
您还有2次机会
请输入账号:
ab
请输入密码:
1234
登陆成功

9.2 String练习之打印字符串

import java.util.Scanner;

public class String02 {
    public static void main(String[] args) {


        System.out.println("请输入字符串:");
        Scanner sc = new Scanner(System.in);

        String line = sc.nextLine();

        for (int i=0;i<line.length();i++){
            System.out.println(line.charAt(i));
        }

    }
}
//output
请输入字符串:
adfsgh
a
d
f
s
g
h

9.3 String练习之统计字符串个数

package com.test02_string;

import java.util.Scanner;

//统计字符串个数
public class string_test01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        for (int i=0;i<line.length();i++){
            char ch = line.charAt(i);
            if (ch>='a'&&ch<='z'){
                smallCount++;
            }else if (ch>='A'&&ch<='Z'){
                bigCount++;
            }else if (ch>='0' && ch<='9'){
                numberCount++;
            }
        }

        System.out.println("该字符串中有小写字母"+smallCount+"个");
        System.out.println("该字符串中有大写字母"+bigCount+"个");
        System.out.println("该字符串中有数字"+numberCount+"个");
    }
}

//output
请输入一个字符串:
sawret245364uSDAFSGDHF
该字符串中有小写字母7个
该字符串中有大写字母9个
该字符串中有数字6

9.4 字符串拼接

package com.test02_string;

//字符串拼接,将{1, 2, 3, 4}输出为[1,2,3,4]
public class string_test02 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        String s = printArray(arr);

        System.out.println(s);

    }

    public static String printArray(int[] arr) {

        String s = " ";

        s += "[";

        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                s += arr[i];
            } else {
                s += arr[i];
                s += ",";
            }
        }

        s += "]";

        return s;

    }
}

9.5 字符串反转

package com.test02_string;

//字符串拼接
public class string_test02 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        String s = printArray(arr);

        System.out.println(s);

    }

    public static String printArray(int[] arr) {

        String s = " ";

        s += "[";

        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                s += arr[i];
            } else {
                s += arr[i];
                s += ",";
            }
        }

        s += "]";

        return s;

    }
}

//output
请输入一个字符串进行反转:
uyf
fyu

9.6 StringBuilder

9.6.1 StringBuilder用例

StringBuilder返回它本身

        StringBuilder sb = new StringBuilder();
        sb.append("hllo");
        //链式结构,sb.append().append()...=sb;
        sb.append("hello").append(10).append("java"); 
        System.out.println(sb);

		//反转
		sb.reverse();
		System.out.println(sb);
//output
hllohello10java
avaj01ollehollh
9.6.2 StringBuilder与String转化
        // String转化 StringBuilder
        String s = "hello"
        StringBuilder sb = new StringBuilder(s);
        System.out.println(s);
        //StringBuilder转化String;通过toString()连接
        System.out.println(sb.toString());
9.6.2.1 应用
9.6.2.1.1 input:{1,2,3};output:[1,2,3]
package com.test02_string;
//input:{1,2,3};output:[1,2,3]
public class stringBuilder {
    public static void main(String[] args) {
        int[] arr = {1,2,3};

        System.out.println(arrayToString(arr));
    }

    public static String arrayToString(int[] arr){
        StringBuilder sb = new StringBuilder();

        sb.append("[");

        for (int i=0;i<arr.length;i++){
            if (i == arr.length-1){
                sb.append(arr[i]);
            }else
                sb.append(arr[i]).append(",");
        }

        sb.append("]");

        String s1 = sb.toString();
        return s1;
    }
}

//output
[1,2,3]
9.6.2.1.2 input:abc;output:cba
package com.test02_string;

import java.util.Scanner;

//reverse string
public class stringBuilder1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        System.out.println(myreverse(sc.nextLine()));


    }

    public static String myreverse(String s){
        //string--StringBuilder--reverse--toString--string
/*        StringBuilder s3 = new StringBuilder(s);
        s3.reverse();
        String s4 = s3.toString();
        return s4;*/

        return new StringBuilder(s).reverse().toString();
    }
}
//output
请输入一个字符串:
askdjfsgv
vgsfjdksa

9.6 StringBuffer

StringBuffer和StringBuilder用法上差不离,区别在于:
StringBuffer线程安全,StringBuilder线程不安全;
性能上:StringBuffer较StringBuilder慢一些

10. Arraylist

10.1 Arraylist构建和添加

//构建
ArrayList<String> array = new ArrayList<>();
//添加
array.add("hello");
array.add("world");
//删除
array.remove("hello");
array.remove(0);//直接用索引
//修改
array.set(1,"java");
//统计个数
array.size();
//获取元素
array.get(0);
package com.arraylist.ts1;

import java.util.ArrayList;

public class tst {
    public static void main(String[] args) {

        ArrayList<String> array = new ArrayList<>();

        System.out.println(array.add("hello"));

        array.add("hello");
        array.add("world");
        System.out.println(array);

        System.out.println(array.add("hello"));

        System.out.println("array:"+array.add("hello"));
    }
}
//output
true
[hello, hello, world]
true
array:true

10.2 遍历Array

for (int i=0;i<array.size();i++){
            System.out.println(array.get(i));
        }

10.3 案例

10.3.1 存储学生对象并遍历
package com.arraylist.ts1.test;

import java.util.ArrayList;

public class tst01 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<student> students = new ArrayList<>();

        //创建学生对象
        student s1 =new student("bob",12);
        student s2 = new student("sam",14);

        //添加学生对象到集合中
        students.add(s1);
        students.add(s2);

        //输出
        for (int i=0;i<students.size();i++){
            student s = students.get(i);
            System.out.println(s.getAge()+","+s.getName());
        }


    }
}

package com.arraylist.ts1.test;

public class student {


    private String name;
    private int age;

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

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

//output
12,bob
14,sam
10.3.2 将10.3.1改写成方法
package com.arraylist.ts1.test;

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

public class tst01 {
    public static void main(String[] args) {
        ArrayList<student> array = new ArrayList<student>();

        addname(array);
        for (int i=0;i<array.size();i++){
            student s = array.get(i);
            System.out.println(s.getAge()+","+s.getName());
        }





 /**       //创建集合对象
        ArrayList<student> students = new ArrayList<>();

        //创建学生对象
        student s1 =new student("bob",12);
        student s2 = new student("sam",14);

        //添加学生对象到集合中
        students.add(s1);
        students.add(s2);

        //输出
        for (int i=0;i<students.size();i++){
            student s = students.get(i);
            System.out.println(s.getAge()+","+s.getName());
        }*/




    }
    public static void addname(ArrayList<student> array){
        Scanner sc = new Scanner(System.in);
        System.out.println("please enter your name: ");
        String name = sc.nextLine();

        System.out.println("please enter your age: ");
        int age = sc.nextInt();

        student s = new student();
        s.setAge(age);
        s.setName(name);

        array.add(s);


    }
}

```java
//output
please enter your name: 
bob
please enter your age: 
12
12,bob

11.项目实战

11.1 学生管理系统

package com.arraylist.ts2;

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

public class studentManager {
    public static void main(String[] args) {
        //创建集合对象,用于存储学生数据
        ArrayList<student> array = new ArrayList<student>();


        while (true) {//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 line = sc.nextLine();

            //Switch循环
            switch (line) {
                case "1":
                    //System.out.println("添加学生");
                    addStudent(array);

                    break;
                case "2":
                    //System.out.println("删除学生");
                    deleteStudent(array);

                    break;
                case "3":
                    //System.out.println("查看所有学生");
                    findAllStudent(array);
                    break;
                case "4":
                    //System.out.println("修改学生");
                    changeStudent(array);
                    break;
                case "5":
                    System.out.println("退出");
                    System.exit(0);//jvm退出
            }
        }

    }

    public static void addStudent(ArrayList<student> array) {
        Scanner sc = new Scanner(System.in);
        //为了sid被while循环外调用
        String sid;

        //为了让程序能够回到这里,使用循环实现
        while (true) {
            System.out.println("请输入学生学号: ");
            sid = sc.nextLine();

            boolean flag = isUsed(array, sid);
            if (flag) {
                System.out.println("你输入的学号已被占用,请重新输入: ");
            } else {
                break;
            }
        }

        System.out.println("请输入学生姓名: ");
        String name = sc.nextLine();
        System.out.println("请输入学生地址: ");
        String address = sc.nextLine();
        System.out.println("请输入学生年龄: ");
        int age = sc.nextInt();


        //创建学生对象
        student s = new student();

        //键盘录入值赋给成员变量
        s.setName(name);
        s.setSid(sid);
        s.setAddress(address);
        s.setAge(age);
        //将学生对象添加到集合中
        array.add(s);

        //提示添加成功
        System.out.println("添加学生成功");
    }

    public static void findAllStudent(ArrayList<student> array) {

        if (array.size() == 0) {
            System.out.println("无数据,请添加数据后查看");
            return;
        }
        //显示表头信息
        System.out.println("学号\t姓名\t年龄\t地址");

        for (int i = 0; i < array.size(); i++) {
            student s = array.get(i);
            System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getAddress());
        }

    }

    public static void deleteStudent(ArrayList<student> array) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你想删除的学生的学号: ");
        String line = sc.nextLine();

        //创建索引用于删除
        int index = -1;

        //循环找到需要删除的学号
        for (int i = 0; i < array.size(); i++) {
            student s = array.get(i);
            if (s.getSid().equals(line)) {
                index = i;
                break;
            }
        }


        if (index == -1) {
            System.out.println("学生信息不存在");
        } else {
            array.remove(index);

            //给出删除提示
            System.out.println("删除成功");
        }


    }

    public static void changeStudent(ArrayList<student> array) {
        Scanner sc = new Scanner(System.in);

        //提示
        System.out.println("请输入需要修改的学生的学号: ");
        String line = sc.nextLine();

        //键盘录入要修改的学生信息
        System.out.println("请输入修改的姓名: ");
        String name = sc.nextLine();
        System.out.println("请输入修改的地址: ");
        String address = sc.nextLine();
        System.out.println("请输入修改的学号: ");
        String sid = sc.nextLine();
        System.out.println("请输入修改的年龄: ");
        int age = sc.nextInt();

        //创建学生对象
        student s = new student();
        s.setAge(age);
        s.setAddress(address);
        s.setSid(sid);
        s.setName(name);

        //遍历集合修改对应的学生信息
        for (int i = 0; i < array.size(); i++) {
            student student = array.get(i);
            if (student.getSid().equals(line)) {
                array.set(i, s);
                break;
            }
        }
    }

    public static boolean isUsed(ArrayList<student> array, String sid) {
        //学号相同为true,不同为false
        boolean flag = false;

        for (int i = 0; i < array.size(); i++) {
            student student = array.get(i);
            if (student.getSid().equals(sid)) {
                flag = true;
                break;

            }
        }

        return flag;
    }
}

package com.arraylist.ts2;

public class student {

    private String name;
    private String address;
    private String sid;
    private int age;

    public student() {
    }

    public student(String name, String address, String sid, int age) {
        this.name = name;
        this.address = address;
        this.sid = sid;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}


  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值