Java小白笔记

1.JDK,JRE与JVM

JDK:是Java开发工具包 ,包括jvm虚拟机,核心类库,开发工具

JRE:是Java运行环境,包括核心类库,运行工具

JDK包含JRE,JRE 包含了JVM

2.面向对象

2.1类和对象

类是共同特征的描述 ,对象是具体的实例。

在Java中必须先设计类,才能获取对象。

类名满足驼峰模式。

public class phone {
    //属性(成员变量)
    String brand;
    double price;

    //行为(方法)
    public void call(){System.out.println("手机在打电话");}

    public void play(){System.out.println("手机在玩游戏");}


}
public class phoneTest {
    public static void main(String[] args) {
        //创建手机的对象
        phone p = new phone();

        //给手机赋值
        p.brand = "小米";
        p.price = 1999;

        //获取手机对象中的值
        System.out.println(p.brand);
        System.out.println(p.price);

        //调用手机的方法
        p.call();
        p.play();
    }
}

2.2封装

人画圆

对象代表什么,就得封装对应的数据,并提供数据对应的方法 (对象圆,半径是圆的属性,根据属性画圆,所以画圆是圆的方法)

人关门

门是自己关的(关门是门 的方法)

封装的好处:告诉我们,如何正确设计对象的属性和方法

                        有什么事,找对象,调方法就行

被private修饰的成员只能在本类中才能访问。

public class Girl {
    //属性
    private String name;
    private int age;

    //针对每个私有化的成员变量,都要提供get和Set方法
    //set方法:给成员变量赋值
    //get方法:对外提供成员变量的值
    public void setName(String name) {
        //name = n;
    //局部变量表示测试类中调用方法传递过来的数据
    //等号的左边表示成员位置的name
        this.name=name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int a) {
        if(a>=18&&a<=55){
            age=a;
        }else {
            System.out.println("非法参数");
        }
    }

    public int getAge() {
        return age;
    }

    //行为
    public void sleep(){System.out.println("女孩在睡觉");}

}
public class GirlTest {
    public static void main(String[] args) {
        //创建女孩的对象
        Girl girl = new Girl();

        //给女孩赋值
        girl.setName("小诗诗");
        girl.setAge(18);

        //获取女孩对象中的值
        System.out.println(girl.getAge());
        System.out.println(girl.getName());

        //调用女孩的方法
        girl.sleep();
    }
}

2.3this关键字和就近原则

局部变量和成员变量

就近原则:谁离我近,我就用谁

this的作用:可以区分局部变量和成员变量

2.4构造方法

如果没有构造方法 系统会默认给出一个无参数的构造方法

如果定义了构造方法,系统将不再提供默认的构造方法

构造方法的重载:带参构造无参构造 方法名相同但参数不同

无论是否适用,都手动书写无参构造和带全部参数的构造方法

构造方法的作用创造对象时,由虚拟机自动调用,给成员变量进行初始化

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

    //如果没写任何的构造方法,
    //那么虚拟机会给我们加一个构造方法
    public Student(){
        System.out.println("看看我运行了吗?");
    }
    public Student(String name,int age){
        this.name=name;
        this.age=age;

    }

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

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }
}
public class StudentTest {
    public static void main(String[] args) {
        //创建对象,调用空的构造方法
        //Student s=new Student();

        Student s = new Student("zhangsan",23);
        System.out.println(s.getAge());
        System.out.println(s.getName());
    }
}

2.5标准的javabean类

①类名需要见名知意

②成员变量使用private修饰

③提供至少两个构造方法

        无参构造方法

        带全部参数的构造方法

④成员方法

        提供每一个成员变量对应的setXxx()/getXxx()

        提供每一个成员变量对应的setXxx()/getXxx()       

快捷键

                 alt+insert/alt+Fn+insert

                ctrl+d 向下复制一行

                Ctrl+shift+/ 多行注释

                ctrl+b

                Shift+f6批量修改

                fori正着遍历

                forr倒着遍历

                ctrl+alt+v

                选中 Ctrl+b 查看源码

插件PTG 1秒生成标准Javabean

2.6对象内存图

面向对象-07-三种情况的对象内存图_哔哩哔哩_bilibili

两个对象的内存图

面向对象-07-三种情况的对象内存图_哔哩哔哩_bilibili

两个引用指向同一个对象

面向对象-07-三种情况的对象内存图_哔哩哔哩_bilibili

基本数据类型:数据值是存储在自己的空间中  比较的是数据值

引用数据类型:数据值是存储在其他空间中 比较地址值

this的本质:代表方法调用者的地址值

成员变量:类中方法外的变量

局部变量:方法中的变量

案例

思路:

1.创建一个长度为3的数组;

2.创建学生对象;
3.把学生对象添加到数组里

4.再次创建一个学生对象

5.唯一性判断

5.1 已存在--提示重复

5.2 不存在--添加学生对象

6.添加学生对象

6.1老数组已经填满;

6.2老数组没有填满

package code;

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

    //如果没写任何的构造方法,
    //那么虚拟机会给我们加一个构造方法
    public Student(){

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

    }

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

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}
package code;

public class StudentTest {
    public static void main(String[] args) {
        Student[] arr = new Student[3];

        Student stu1 = new Student("zhangsan",23,1);
        Student stu2 = new Student("lisi",24,2);
        Student stu3 = new Student("wangwu",18,3);

        arr[0] = stu1;
        arr[1] = stu2;
        arr[2] = stu3;

        //要求1
        Student stu4 =new Student("zhaoliu",26,4);
        //唯一性判断
        boolean flag = contains(arr, stu4.getId());
        if (flag){
            System.out.println("当前id重复,请修改id后在进行添加");
        }else{
            int count = getCount(arr);
            if(count == arr.length){
                Student[] newArr=creatNewArr(arr);
                newArr[count]=stu4;

                //要求2
                printArr(newArr);
            }else{
              arr[count] = stu4;

              //要求2
                printArr(arr);
            }

        }





    }
    public  static  void  printArr(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            if(stu != null){
                System.out.println(stu.getId()+","+ stu.getAge()+","+stu.getName());
            }

        }
    }
    public  static  Student[] creatNewArr(Student[] arr){
        Student[] newArr = new  Student[arr.length+1];
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];

        }
        return newArr;
    }
    public static  int getCount(Student[] arr){
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null){
                count++;
            }

        }
        return count;
    }
    public static  boolean  contains( Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            Student stu = arr[i];
            int sid = stu.getId();
            if (stu != null) {
                if (sid == id) {
                    return true;
                }

            }
        }
        return  false;
    }
}

3.字符串

3.1API文档练习

3.2创建String对象的两种方式 内存分析

3.3字符串的比较

public class Main {
    public static void main(String[] args) {
       String s1="Abc";
       String s2 = new String("abc");

       boolean result = s1.equals(s2);//不忽略大小写
        System.out.println(result);

        boolean result2 =s1.equalsIgnoreCase(s2);//忽略大小写
        System.out.println(result2);
        }

}

3.4用户登录练习

 3.4遍历字符串

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str =sc.next();

        //进行遍历
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            System.out.println(c);


        }

        }

}

3.5统计字符个数

3.6字符串反转

3.7拼接字符串

3.8截取

包头不包尾

public class Main {
    public static void main(String[] args) {
        String sum="123456";

        String substring = sum.substring(0, 3);
        System.out.println(substring);//123

    }

}

3.8替换

public class Main {
    public static void main(String[] args) {
        String sum="123456";

        String replace = sum.replace("2", "*");
        System.out.println(replace);//1*3456

    }

}

3.9StringBuilder

是一个内容可变的容器

场景应用:字符串的拼接,字符串的反转

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

       StringBuilder sb = new StringBuilder("abc");
        //添加元素
       sb.append(1);
       sb.append(true);
        //反转
       sb.reverse();
       //获取长度
       sb.length();
        //把StringBuilder变回字符串
        String str =sb.toString()


        System.out.println(str);

    }

}

链式编程:当我们在调用一个方法时,不需要用变量接收他的结果,可以继续调用其他方法

对称字符串

拼接字符串

3.10StringJoiner

public class Main {
    public static void main(String[] args) {
        //1.创建一个对象,并指定中间的间隔符号
        //StringJoiner sj = new StringJoiner("---");
        StringJoiner sj = new StringJoiner(",","[","]");
        //2.添加元素
        sj.add("aaa").add("bbb");
        System.out.println(sj);



    }

}

3.11字符串原理

3.12调整字符串

public class Main {
    public static void main(String[] args) {
        String strA = "abcd";
        String strB = "cdab";

        boolean result = check(strA,strB);
        System.out.println(result);
    }


        public static  boolean check(String strA,String strB){
            for (int i = 0; i < strA.length(); i++) {
                strA = rotate(strA);
                if (strA.equals(strB)) {

                    return  true;
                }
            }
            return  false;
        }

        public static String rotate(String str){

            char first = str.charAt(0);
            String end = str.substring(1);
             return end+first;

        }

}

4.集合

public class Main {
    public static void main(String[] args) {
        //创建集合的对象
        //泛型<>:限定集合中存储数据的类型
        ArrayList<String> list = new ArrayList<String>();
        //打印对象不是地址值,而是集合中存储数据内容

        //成员方法 增删改查
        //添加元素
        boolean result = list.add("Aaa");
        System.out.println(result);//true
        System.out.println(list);//[Aaa]
        
        //删除元素
        boolean result2 = list.remove("Aaa");//true

        String remove = list.remove(0);//Aaa

        //修改元素
        String ddd = list.set(1, "ddd");
        
        //查询元素
        String s = list.get(0);
        
        //遍历  list.fori
        for (int i = 0; i < list.size(); i++) {
            
        }
    }
}

4.1添加学生对象并打印

4.2查找用户是否存在

package code;

public class User {
    //属性
    private String username;
    private String password;
    private String id;

    public User(){}

    public User(String id,String username,String password){
        this.id=id;
        this.username=username;
        this.password=password;

    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }
}
package code;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<User> list = new ArrayList<>();

        User u1=new User("001","zhangsan","123");
        User u2=new User("002","zhaowu","123");
        User u3=new User("003","lisi","123");

        list.add(u1);
        list.add(u2);
        list.add(u3);

        boolean flag=con(list,"001");
        System.out.println(flag);;
    }

    //1.我要干什么 根据id找用户
    //2.我干这件事需要什么才能完成 list id
    //3.调用处时是否需要使用方法的结果 返回
    public static  boolean con(ArrayList<User> list,String id){
       return getIndex(list,id)>=0;
    }
    public static int getIndex(ArrayList<User> list,String id){
        for (int i = 0; i < list.size(); i++) {
            User user = list.get(i);
            String uid = user.getId();
            if(uid.equals(id)){
                return  i;
            }
        }
        return -1;
    }


}

 返回多个数据时可以把这些数据先放到一个容器里(集合 数组)再把容器返回

 5.static

表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量

static修饰成员变量叫静态变量:调用:类名调用

特点:

静态变量是随着类的加载而加载的,优先于对象出现的

不属于对象,属于类

被该类所有对象共享

被static修饰的成员方法,叫做静态方法

特点:

多用在测试类和工具类中

5.1工具类

1.私有化构造方法

2.方法定义为静态

3.类名见名知意

 

5.2static 注意事项

6.继承

public class 子类 extends 父类{}

继承的特点

Java只支持单继承,不支持多继承,但支持多层继承

单继承:一个子类只能继承一个直接父类

不支持多继承:子类不能继承多个父类

多层继承:子类A继承父类B,父类B可以继承父类C(间接父类,直接父类)

每个类都直接或者间接的继承于object

 private:子类就无法访问

私有:只能在本类中访问

6.1子类到底能继承父类中的哪些内容?

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

成员变量

成员方法

 方法的重写

方法重写的本质是覆盖 

方法重写的注意事项:

 

6.3 继承中的构造方法和thissupper关键字

继承中构造方法的访问特点

 

this/supper使用总结:

7.多态

 7.1多态调用成员的特点

 7.2多态的优势

 方法中,使用父类型作为参数,可以接收所有子类对象

 

7.3 多态的弊端

8.包和final

8.1包 

 

8.2final

 9.权限修饰符和代码块

9.1权限修饰符

9.2代码块

 

 静态代码块

 

10.抽象类接口内部类

10.1抽象类 

10.2接口

接口是一种规则,是对行为的抽象

 

 

 

 适配器

 10.3内部类

 成员内部类

匿名内部类

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值