Java学习笔记-基础语法Ⅱ

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

局部变量:方法中的变量

注意,成员变量有默认初始值,而局部变量需要赋初始值

Java中虽然没有明确规定类必须首字母大写,但为了规范最好大写(因为自己刚刚写的时候就没看清写错了)

有时候不想在创造对象时,直接赋值,可以使用private关键字,并且加上get和set方法,来进行调用修改,注意这里即使变量首字母无论大写小写,get和set方法后面跟的变量名首字母都是大写

同时,可以在set方法中加入判断语句等功能

this代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象

封装:面向对象三大特征之一(封装、继承、多态),是面向对象编程语言对客观世界的模拟,客观世界成员变量都是隐藏在对象内部的,外界无法直接操作

将类的某些信息隐藏在类内部,不允许外部直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法

封装好处:

通过方法来控制成员变量的操作,提高了代码的安全性

把代码用方法来进行封装,提高了代码的复用性

构造方法:特殊方法,作用是创建对象,完成对象数据的初始化

成员方法:类中的方法,注意,成员方法不要加static 可以加static,但是静态方法只能调静态方法和静态变量

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

当创建类的时候,如果没有构造方法,系统会给出默认的构造方法,建议创建类的时候,手动加上无参构造方法,那么再自己创建新的构造方法,调用时不容易出错。因为自定义构造方法,那么系统将不再提供默认的构造方法

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

    public Student() {
    }

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

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

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

    public void show() {
        System.out.println(name + " " + age);
    }
}
public class StudentDemo {
    public static void main(String[] args) {
        Student st1 = new Student();
        st1.show();

        Student st2 = new Student(30);
        st2.show();

        Student st3 = new Student("林青霞");
        st3.show();

        Student st4 = new Student("林青霞", 40);
        st4.show();
    }
}

尽量在创建类的时候,包含无参、带参构造方法,get方法、set方法

Java帮助文档使用:索引描述构造方法成员方法

注意,在查看成员方法时,要注意其参数、返回值

Java的==是比较两个变量的地址值是否相同,equals才是比较两个值是否相同

而python中的==是比较两个值是否相同,is才是比较两个地址值是否相同

public class String2 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
        String s4 = new String("abc");
//        System.out.println(s3);
        System.out.println(s3==s1);
        System.out.println(s3.equals(s1));
        System.out.println(s1==s2);
        System.out.println(s3==s4);
    }
}

false
true
true
false

String类在Java帮助文档的这句话:字符串是常量,它们的值不能被创建后改变。支持可变字符串字符串缓冲区。因为字符串对象是不可改变的,所以它们可以被共享,按我的理解,类似python的元组,给定之后就不能改变,但是可以重新赋值,Java里面应该是指向堆的地址不同

上述代码还需注意一点,每次new出来的String,地址都会不一样,虽然他们可以指向相同的值。如果是直接双引号的字符串,那么地址是相同的

public class String2 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
        String s4 = new String("abc");
//        System.out.println(s3);
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        System.out.println(s3.hashCode());
        System.out.println(s4.hashCode());
        System.out.println("--------------");
        System.out.println(s3==s1);
        System.out.println(s3.equals(s1));
        System.out.println(s1==s2);
        System.out.println(s3==s4);
    }
}

// 这里的4个变量的hashCode全部相同

这里也看了下equals和hashCode,在String类中重写了,现在我需要记住的东西是:

equals就是看内容是否相同

equals相同的东西,hashCode一定相同,equals不同的东西,hashCode也可能相同

Java的遍历字符串,和C语言很像,和python不像,不要搞混了

public class Shuzu {
    public static void main(String[] args) {
        String line = "Hello World!";
        for(int i = 0;i<line.length();i++){
            System.out.println(line.charAt(i));
        }
    }
}
public class Int_shuzu {
    public static void main(String[] args) {
        int [] arr = {1,2,3,4};
        for(int i = 0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}

上面的数组,是可以直接通过索引来进行输出或者操作,字符数组则不能够,猜测与String创建之后不能进行修改有关数组也是不能修改的

String在进行字符串拼接时,容易造成堆内存浪费的情况,所以有StringBuilder这个类

StringBuilder是一个可变的字符串类

public class StringBuilder_1 {
    public static void main(String[] args) {
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = sb1.append("Hello");
        StringBuilder sb3 = sb2.append("World");
        System.out.println("sb1:"+sb1);
        System.out.println("sb2:"+sb2);
        System.out.println("sb3:"+sb3);
        System.out.println(sb1==sb2);
        System.out.println(sb1==sb3);
        System.out.println(sb3==sb2);
    }
}

StringBuilder和String相互转换,为什么要做这个转换,因为String创建的字符串不能修改,且String中方法不是很多,StringBuilder中方法很多如append方法和reverse方法,所以需要做这个转换

怎么转换:

String到StringBuilder:直接StringBuilder创建时传入String

StringBuilder到String:toString方法

public class StringBuilder_2 {
    public static void main(String[] args) {
        String s = "Hello";
        StringBuilder sb = new StringBuilder(s);
        System.out.println(sb);
        System.out.println("---------------");
        StringBuilder ssb = new StringBuilder("World");
        String st = ssb.toString();
        System.out.println(st);
    }
}

集合:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

ArrayList<E>:可调整大小的数组实现,其中<E>是一种特殊的数据类型,泛型

ArrayList中有集中常用方法:addremovegetsetsize

add方法很普遍,remove方法需要稍微注意下,remove删除不存在的东西返回false,和python不一样

import java.util.ArrayList;

public class ArrayList_1 {
    public static void main(String[] args) {
        ArrayList<String> arr1 = new ArrayList<>();
        arr1.add("hello");
        System.out.println(arr1);
        arr1.add("hello");
        arr1.add("world");
        arr1.add("java");
        System.out.println(arr1);
        System.out.println(arr1.remove("hello"));
        System.out.println(arr1);
        System.out.println(arr1.remove("javaee"));
        System.out.println(arr1);

        ArrayList<Integer> arr2 = new ArrayList();
        arr2.add(11);
        System.out.println(arr2);
    }
}
[hello]
[hello, hello, world, java]
true
[hello, world, java]
false
[hello, world, java]
[11]

python列表不能删除列表中不存在的元素

a = ["hello",1,'world','python',2]
b = a.remove("hello")
print(b)
# c = a.remove("java")

python的集合也不可以删除集合中不存在的元素

a = set([1,2,3,4,5])
a.remove(6)
print(a)

# 报错

简单复习一下python的列表常用删除函数:

  • del删除指定列表位置的值

  • remove删除指定值

  • pop不指定则删除末尾元素,也可以删除指定位置元素,同时会返回该值

同时注意一下,Java的ArrayList的5个基本函数已给出,那么在遍历,或者查找等要求下,都是使用上述5中方法实现

import java.util.ArrayList;

public class ArrayList_2 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("hello");
        arr.add("world");
        arr.add("java");
        for(int i=0;i<arr.size();i++){
            System.out.println(arr.get(i));
        }
    }
}

请千万注意,这里获取长度用size函数,遍历使用get函数


length是对应数组的属性

length()是对应String的方法

size()是集合的方法


JVM虚拟机退出:

System.exit(0);

posted on 2021-12-14 16:49  lpzju  阅读(44)  评论(0编辑  收藏  举报

导航