java基础笔记(二)

发布于:2023-01-24 ⋅ 阅读:(16) ⋅ 点赞:(0) ⋅ 评论:(0)

1.2 面向对象基础

1.2.1 面向对象与面向过程

​ 面向对象:把所有事物都当作独立的对象,在处理问题过程中考虑问题中各个对象之间的关系,java语言采用的就是面向对象思想;

​ 面向过程:以处理问题的过程为中心的编程思想,它首先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,在使用时依次调用,是一种基础的顺序的思维方式,C语言是采用面向过程的思想;

1.2.2 类和对象的概述

​ 类:就是一段描述信息,主要是从事物具备的属性和行为去描述。(对一些列具有共同属性和行为的描述)。类是Java的基本组成部分。

​ 属性:就是事物具备的特征;

​ 行为:就是事物能做什么事;

​ 对象:万物皆对象,我们看得到摸得着的都是对象。

​ 类和对象的关系:

​ 在实际生活中,类就是对象的描述信息,先有对象后有类;

​ 在Java中,类也是对象的描述信息,但是是先有类后有对象;类是对象的数据类型。

1.2.3 分析对象在内存中的存储

​ 单个对象:
​ 在创建对象的时候,new会在堆内存中申请一块内存空间,new 出来的对象会存放在堆内存中,这个时候,对象的成员变量的值是默认值,和数组的默认值规则一样。
​ 当给对象的成员变量赋值时,所赋的值会覆盖原有的默认值。
​ 成员方法在被调用的时候会进栈,当方法调用完毕之后,会弹栈。

​ 多个对象:
​ 多个对象存放在堆内存中,都有不同的内存划分,成员变量存储在各自的内存区域中,对于成员方法,多个对象公用一份。

​ 多个对象指向同一地址时:
​ 当多个对象的引用指向同一内存空间时,变量所记录的地址值是一样的,只要有任何一个对象修改了内存中的数据,随后,无论使用哪一个对象进行数据获取,都是修改后的数据。

1.2.4 成员变量和局部变量的区别

区别 成员变量 局部变量
位置不一样 类中方法外 方法的声明上/方法的内部
内存的位置不一样 在堆内存 在栈内存
声明周期不一样 随着对象的创建而创建,随着对象的消失而消失 随着方法的调用而创建,随着方法的弹栈而消失
初始化值 有,系统默认 初始化值 没有,需要手动去赋值

1.2.5 private关键字的应用

​ 在没有使用private关键字之前,数据不安全,使用private关键字之后,提高了代码的安全性。

​ 使用private修饰的变量在别的类是没有办法使用的,只能在当前的类里面使用。

1.2.6 this关键字的应用

​ 如果成员变量和局部变量同名的时候,我们使用this来区分成员变量和局部变量。

​ this.变量名 代表的是当前类的成员变量

​ this:其实就是代表当前的对象

1.2.7 this关键字的内存原理

​ 是哪一个对象调用,this就引用的(地址)是那个对象

1.2.8 面向对象特性之封装

​ 封装的概述:

​ 是面向对象三大特征之一(封装,继承,多态)

​ 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的

​ 封装的原则:

​ 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

​ 成员变量private,提供对应的getXxx()/setXxx()方法

​ 封装的好处:

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

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

1.2.9 构造方法(Constructor)

​ 构造方法是一种特殊的方法,体现在两方面:作用特殊和结构特殊

​ 作用:创建对象,同时初始化成员变量,

​ 格式:没有void,也没有返回值类型

​ 没有return,但是会返回一个地址

public class 类名{
//无参构造
	修饰符 类名(){

	}
//有参构造
	修饰符 类名(参数列表){
		this.参数1=参数1;
		this.参数2=参数2;
		……
	}
}

1.2.10 构造方法的注意事项

​ 系统会给我们提供一个默认的无参构造方法

​ 如果我们自己写了构造方法以后,系统就不会给我们提供默认的无参构造。

​ 如果我们写上了构造方法,建议把无参构造也写上

1.2.11 标准类的定义规范(编程习惯)

​ 成员变量私有

​ 两种构造方式都要写

​ 给对应的成员变量提供get/set方法

1.3 API基础

1.3.1 API的使用方式

​ API(Application Programming Interface):应用程序接口

​ java中的API指的是JDK中提供的各种功能的java类,这些类将底层的实现封装了起来

1.3.2 String类的特点

​ 首先String类代表字符串,java程序中的所有字符串文字都是此类的实例。换句话说:java程序中所有的双引号字符串,都是String类的对象。String类都在Java.lang的包下,注意String类在使用时不需要导包!

​ 特点:
1.字符串不可变,它们的值在创建之后不能被改变
​ 2.String类对象的值是不可以被改变的,但是他们可以被共享
3.字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])

1.3.3 String类的常用构造方法

​ public String() 创建一个空白字符串对象,不含有任何内容 String s1=new String()

​ public String(char[]chs) 根据字符数组的内容,来创建字符串对象 String s2=new String(char[]ch)

​ public String(byte[]by) 根据字节数组的内容,来创建字符串对象 String s3=new String(byte[]by)

​ String s4=“abc123” 直接赋值的方式创建字符串对象

​ 通过new来创建字符串对象,每一次new,都会在堆内存里申请一个内存空间,虽然内容相同,但是地址值不同。

​ 通过直接赋值方式创建,同一个字符串,只要字符序列相同(顺序和大小写),无论在程序中出现多少次,JVM都只会建立一个String对象

1.3.4 字符串的比较规则

​ “==”:在比较基本数据类型时,比较的是具体的值;在比较引用数据类型时,比较的是对象的地址值。

​ “equals”:String类的equals方法,是用来比较两个对象的内容是否相等(区分大小写),与地址值无关。其他类中的equals方法也是比较地址值,只有在String类中是比较两者内容,因为在String类中重写了equals方法,如果要想equals方法只比较内容可以在类中重写equals方法。

​ “equals IgnoreCase”:String类中的equals IgnoreCase方法是用来比较两个对象在忽略大小写的前提下的内容是否相等。

1.3.5 equals方法来简单使用实例

public class StringTest1{
	public static void main(String[]args){
		String userName="Zhangliming";
		String userPassword="zlm123456"
		for(int i=0;i<3;i++){
			Scanner sc= new Scanner(System.in);
			System.out.println("请输入用户名:")String name=sc.nextLine();
			System.out.println("请输入密码:")String password=sc.nextLine();
			if(name equals(userName)){
				System.out.println("登录成功!")
				break;
			}else{
				if(i==2){
					System.out.println("登陆失败,账号被锁定!")
				}else{
					System.out.println("还有"+2-i+“次机会”)
				}
			}
		}	
	}
}

1.3.6 遍历字符串的方式

掌握方法 char 变量名=字符串对象名.charAt(i)。返回指定字符串索引处的char值,字符串的索引也是从0开始的。

掌握方法 **字符串对象名.length()**能够获取字符串的长度。

public class StringTest2{
	public static void main(String[]args){
		Scanner sc =new Scanner(System.in);
		System.out.println("请录入一个字符串:")
		String s1=sc.nextLine();
		for(int i=0; i<s1.length(); i++) {
		 		char ch= s1.charAt(i);
           		System.out.println(ch);
        }
	}
}

1.3.7 字符串的拼接

public class StringTest3{
	 public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s1=sc.nextLine();
        String s2="[";
        for(int i=0;i<s1.length();i++){
            s2+=s1.charAt(i);
        }
        s2+="]";
      	System.out.println(s2);
	}
}

1.3.8 字符串的反转操作

public class StringTest3{
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s1=sc.nextLine();
        String s2 ="";
        for(int i=s1.length()-1;i>=0;i--){
            s2+=s1.charAt(i);
            //System.out.print(s1.charAt(i)+" ");
        }
        System.out.println(s2);
    }
}

1.3.9 StringBuilder类的作用

​ StringBuilder是一个可变的字符串类,我们可以把它看成一个容器,这里的可变指的是StringBuilder对象中的内容是可变的

​ String类:内容是不可变的

​ StringBuilder类:内容是可变的

​ StringBuilder线程不安全,StringBuffer线程安全

1.3.10 StringBuilder类的构造方法

方法名 说明
public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象

1.3.11 StringBuilder类的常用方法

方法名 说明
public StringBuilder append(任意类型) 添加数据,并返回对象本身
public StringBuilder reverse() 返回相反的字符序列

1.3.12 用StringBuilder完成字符串拼接和反转

 public class StringTest3{
        public static void main(String[]args){
            String s1="hello";
            String s2="world";
            StringBuilder sb=new StringBuilder(s1);
            sb.append(s2);
            String s3=sb.toString();
            System.out.println(s3);
            sb.reverse();
            String s4=sb.toString();
            System.out.println(s4);
        }
    }

1.4 集合基础

1.4.1 ArrayList集合的特点

​ 集合是一种存储空间可变的存储模型,存储的数据容量可以发生改变,与数组不同,数组的容量是不变的。

​ 集合的底层是数组实现的,长度可以变化。

​ 泛型:,用于约束集合中存储元素的数据类型。

1.4.2 ArrayList的构造方法

​ 创建一个空的集合对象-------------------public ArrayList<>

​ 创建一个集合:ArrayListlist =new ArrayList<>(); 其中E:放引用 数据类型:类、数组、接口。例如:

​ 可以放一个类名:

​ ArrayListlist=new ArrayList<>();

​ 可以放基本数据类型的包装类:

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

​ ArrayListList=new ArrayList<>();

1.4.3 ArrayList的常用操作

​ 删除操作:list.remove(Object o) list.remove(int index) 注意 顺序遍历删除的时候,要i–;逆序遍历删除的时候,不用i–;

​ 增添操作:list.add(E element) list.add(int index,E element) 没加index默认在末尾加

​ 修改操作:list.set(int index,E element)

​ 查询操作:list.get(int index) 注意:要找一个对应类型的对象来接 收。
​ 查询长度操作: list.size();

1.4.4 集合存储自定义类型并遍历

​ 1.创建集合对象,

​ 2.往集合中添加字符串对象;

​ 3.遍历集合:for(int i=0;i<list.size();i++){

​ 对应类型 对象=list.get(i);

​ System.out.println(对象)

​ }