JAVA基础复习

Java面向对象

  • 面向对象的三大特性:封装、继承、多态

1、对象的内存图

  • 一个对象内存图
  • image-20211024204410704

  • 两个对象的内存图
  • image-20211024201627297

  • 使用类作为方法的返回值
  • image-20211024203542235

2、封装

  • java中封装的表现形式(封装就是将一些细节隐藏起来,对外界不可见
    • 方法就是一种封装
    • 关键字private也是一种封装
2.1、private关键字
  • 使用了private 关键字之后,本类之中的仍然可以随意使用,但是超出本类就不能直接访问

  • package com.one;
    public class Person {
    	private String name="";
    	private boolean male;
    	/*使用了private 关键字之后,本类之中的仍然可以随意使用,但是超出本类就不能直接访问
    	 * */
    	public String getName()
    	{
    		return name;
    	}
    	public void setName(String name){
    		this.name=name;
    	}
    	//对于布尔类型的返回值需要将对应的getXXX方法改为isXxxx,set方法不变
    	public void setMale(boolean a){
    		male=a;
    	}
    	public boolean isMale(){
    		return male;
    	}
    }
    
2.2 .this关键字的使用
  • 当方法的局部变量和成员变量重名的时候,根据就近原则优先使用局部变量;如果需要使用成员变量需要使用的格式this.成员变量

  • 通过谁调用的方法,谁就是this,(即调用方法的对象)

2.3.构造方法
  • 构造方法不要写返回值类型两void也不要写
  • 构造方法不要写return返回值
  • 如果不写构造方法,编译器会默认添加一个无参,无方法体的构造方法;
  • 一旦编写至少一个构造方法,默认编译器将不在有默认添加构造方法;
  • 重载:方法名称相同,参数列表不同
  • 构造方法可以重载,即一个类可以有多个构造方法

image-20211025201747101

package com.one;
public class Demo2 {
	public static void main(String[] args) {
		Person per=new Person();
		per.setName("傻狗");
		per.say("二哈");
		System.out.println(per);
	}
}

package com.one;
public class Person {
	public Person(){
		System.out.println("我是构造方法");
	}
	private String name="";
	private boolean male;
	/*使用了private 关键字之后,本类之中的仍然可以随意使用,但是超出本类就不能直接访问
	 * */
	public String getName()
	{
		return name;
	}
	public void setName(String name){
		this.name=name;
	}
	//对于布尔类型的返回值需要将对应的getXXX方法改为isXxxx,set方法不变
	public void setMale(boolean a){
		male=a;
	}
	public boolean isMale(){
		return male;
	}
	public void say(String name){
		System.out.println("我是局部变量"+name);
		System.out.println("我是成员变量"+this.name);
		System.out.println(this);
	}
}
2.4 标准类 javaBean
  • 一个标准类的格式通常拥有以下四个要求

    • 所有成员变量使用private修饰
    • 为每个成员变量生成SETTER/Getter方法
    • 编写一个无参构造函数
    • 编写一个全参构造函数
  • package com.one;
    public class Student {
    	public Student() {
    	}
    	public Student(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	private String name;
    	private int age;
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    

3、Scaner类的使用

3.1.引用类型一般使用步骤
  • 1、导包
    • import 包路径.类名称
    • 如果需要使用的目标类和当前类位于同一个包下,则可以省略不写。
    • 只有java.lang包下的内容不需要导包; 其他都需要使用import语句
  • 2、创建
    • Class object =new Class();
  • 3、使用
    • 对象名.成员方法名
3.2、 Scaner类
package com.two;
import java.util.Scanner;
public class DemoScaner {
	public static void main(String[] args) {
		// System.in表示是从键盘输入
		Scanner sc = new Scanner(System.in);
		// 获取输入的数字nextInt();//nextint去到的也是字符串但是转换成了int类型
		int number= sc.nextInt();
		System.out.println("获取到的数字是"+number);
		// 获取字符串
		String str =sc.next();
		System.out.println("获取到的字符串是"+str);	
	}
}
3.3、匿名对象

创建对象的标准格式

标准格式:Person object =new Persion()

匿名格式 :new Persion()

  • 注意事项:匿名对象只能使用唯一的一次,下次使用不得不再创建一个新对象

  • 使用建议 : 如果确定一个对象只需要使用唯一的一次,就可以使用匿名对象;

package com.two;
import java.util.Scanner;
public class Demo {
	public static void main(String[] args) {
		//标准格式
		//Scanner sc= new Scanner(System.in);
		//sc.next();
		//匿名对象
		String str=new Scanner(System.in).next();
		System.out.println(str);
		System.out.println("===============================");
		//匿名对象传参
		System.out.println("===============================");
		//返回值
		Scanner funk=methodKey();
		String cc=funk.next();
		System.out.println("cc");
        System.out.println("=============Hello===========");
	}
	//匿名对象当做参数
	public static void method(Scanner sc){
		int a= sc.nextInt();
		System.out.println("参数方法"+a);
	}
	//使用匿名对象 当做返回值
	public static Scanner methodKey(){
		return new Scanner(System.in);
	}
}

image-20211025223320831

4、Random类

  • 通常用来生成随机数字,Random也属于引用类型的使用步骤;

  • package com.two;
    import java.util.Random;
    public class DemoRandom {
    	public static void main(String[] args) {
    		//导包后实例对象
    		Random r=new Random();
    		int num =r.nextInt();
    		//当nextInt中不写任何参数时,随机数的范围是int的整个范围,包含负数部分
    		System.out.println("产生的随机数字是"+num);
    		// 写入参数,nextInt使用的是取头不取尾的区间形式,
            //如果需要使用指定区间的时候需要在对应的结尾值+1
    		int rannum=r.nextInt(10);//范围是0-9取头不取尾
    		System.out.println("产生的随机数字是"+rannum);
    	}
    }
    

5、对象数组

  • package com.two;
    
    public class DemoArray {
    
    	public static void main(String[] args) {
    		// 创建对象数组
    		//创建对象数组长度为3用来存放Person类型
    		Person[] array=new Person[3];
    		
    		Person one =new Person("古力娜扎",20);
    		Person two =new Person("迪丽热巴",20);
    		Person three= new Person("傻狗",30);
    		
    		array[0]=one;//地址值,将one的地址值赋值到0号元素
    		array[1]=two;
    		array[2]=three;
    		System.out.println(array[0]);
    		System.out.println(array[1]);
    		System.out.println(array[2]);
    		System.out.println(array[0].getName());
    		/*数组有一个缺点,一旦被创建,程序运行期间不允许改变*/
    	}
    }
    

6、集合ArrayList

  • 集合就是一种容器,可以用来存储多个数据

  • java集合参考文档:https://www.runoob.com/java/java-collections.html

  • 数组的长度是不可变的,但是ArrayList的长度是可以任意 改变的

  • 对于ArrayList有一个尖括号代表<E>代表泛型,即集合存储的都是对象

    • 泛型:也就是装在集合内的所有元素,全部都是统一类型
      • 泛型:https://www.cnblogs.com/coprince/p/8603492.html
    • 注意:泛型只能是引用类型,不能是基本类型;
  • 注意事项:对于ArrayList集合来说直接打印,显示的不是地址值,而是内容。如果内容是空得到的是空的只能中括号[ ]

  • 提示:方法与Python中的列表相类似

  • package com.two;
    
    import java.util.ArrayList;
    
    public class DemoArrayList {
    
    	public static void main(String[] args) {
    		//创建集合list,全部都是String类型的数据
    		//从JDK1.7开始创建集合时,右面中括号的中不用写泛型
    		ArrayList<String> list =new ArrayList<>();
    		
    		System.out.println(list);//[]
    		list.add("章北海");
    		list.add("程心");
    		list.add("章北海");
    		System.out.println(list);//[章北海, 程心, 章北海]允许重复值
    	}
    }
    
  • 也可以存储自定义的对象

6.1、ArrayList常用方法
  • 添加

    • add

    • 向集合中添加元素,添加类型与泛型一直,返回值代表是否成功(布尔值)

      注:对于ArrayList集合来说,add添加动作一定成功,所以返回值可用可不用;但是对于其他集合来说,add添加不一定成功;

  • 获取

    • get
    • 从集合中获取元素,参数是索引,返回值是索引对应的位置元素(索引从0开始);
  • 删除

    • remove
    • 从集合中删除元素,参数是索引编号,返回值就是被删掉的元素
  • 获取长度

    • size
    • 获取集合的长度,返回是集合中的元素个数。
  • package com.two;
    
    import java.util.ArrayList;
    
    public class DemoArrayList {
    
    	public static void main(String[] args) {
    		//创建集合list,全部都是String类型的数据
    		//从JDK1.7开始创建集合时,右面中括号的中不用写泛型
    		ArrayList<String> list =new ArrayList<>();
    		
    		System.out.println(list);//[]
    		list.add("章北海");
    		list.add("程心");
    		list.add("章北海");
    		System.out.println(list);//[章北海, 程心, 章北海]允许重复值
    		boolean flag =list.add("自然选择舰长:东方延续");
    		System.out.println(flag);
    		System.out.println(flag);
    		
    		list.remove(1);
    		String whoname=list.remove(2);
    		System.out.println("被删除的是"+whoname);
    		
    		int lenlist =list.size();
    		System.out.println(list);
    		System.out.println("现在集合的长度是"+lenlist);
    		System.out.println("=====================================");
    		list.add("丁仪");
    		list.add("傻孩子门,快跑啊!");
    		//遍历集合
    		for(int i=0;i<list.size();i++){
    			System.out.println(list.get(i));
    		}
    	}
    }
    
  • image-20211026160234813

6.2 、存储基本类型
  • 如果需要向集合ArrayList当中存储基本类型数据;必须使用对应的包装类

    • 基本数据类型:byte,int, short, long, boolean,char, float,double等
    • 包装类型 : Byte,Integer,Short,Long,Boolean,Character,Float,Double等
  • package com.two;
    
    import java.util.ArrayList;
    
    public class DemoArrayList {
    
    	public static void main(String[] args) {
            //使用包装类
    		ArrayList<Integer> intlist = new ArrayList<>();
    		intlist.add(123);
    		System.out.println(intlist.get(0));
    	}
    
    }
    
    
  • 从JDK1.5开始,支持自动装箱:基本类型 ---->包装类型,自动拆箱:封装类型----->基本类型;即放入集合前是int型,放入集合后是Integer型,取出来是,自动将Integer类型转换为int

6.3 集合框架

image-20211026165154259

image-20211026165250143

7、字符串String类

7.1字符串的特点
  • 字符串是常量,内容不可变------ 重点
  • 字符串不可改变,所以字符串可以是共享使用
  • 字符串效果上相当于是char[]字符数组,但底层是byte[]字节数组。
7.2 字符串创建的方法
  • 常见3+1方法

    • 三种构造方法

      public String() //创建一个空白字符串,不包含任何内容
      public String(char[] array) //根据字符数组的内容,来创建对应的字符串
      public String(byte[] array)//根据字节数组的内容,来创建对应的字符串
      
    • 一种直接创建

      String str ="";
      
  • 字符串不管有没有new,都是对象,但是直接使用""创建的字符串由JVM补充new的过程;

  • 被创建的字符串对象可以被修改,过程类似于两个对象中引用(个人见解)

  • package com.three;
    
    /*
     * java.lang.String类代表字符串
     * API:java字符串中的所用字符串字面值(如“abc”)都作为此类的实例实现
     * 即,程序中的所有双引号都是String类的对象,就是算是没有new,也照样是
     * */
    
    public class DemoString {
    
    	public static void main(String[] args) {
    		//三种构造方法
    		String str1= new String();
    		System.out.println("第一个字符串是"+str1);
    		
    		char[] chararray={'A','B','C'};
    		String str2= new String(chararray);
    		System.out.println("第二字符串是"+str2);
    		
    		byte[] bytearray={97,98,99};
    		String str3 =new String(bytearray);
    		System.out.println("第三个字符串是"+str3);
    		
    		//直接创建
    		String str4 ="HELLO WORLD";
    		System.out.println("第四个字符串是"+str4);
    		//=================
    		str1="hello heell0";
    		System.out.println("我给第一个字符串赋值了,第一个字符串是"+str1);
    	}
    
    }
    
    
7.3 字符串的常量池
  • 从jdk1.7开始字符串常量池存储在堆内存当中

  • 直接使用的字符串存储在字符串常量池中

    • 对于引用类型来说,==进行的是地址值的比较
    • 双引号直接写的字符串在常量池中,new的不在池当中;
  • image-20211101171347404

  • package com.three;
    public class DemoStr {
    	public static void main(String[] args) {
    		String str1="abc";
    		String str2="abc";
    		char[] arr = {'a','b','c'};
    		String str3=new String(arr);
    		System.out.println(str1==str2);
    		System.out.println(str3==str2);
    		System.out.println(str2==str3);
    	}
    }
    
7.4 equals方法和equalsIgnoreCase方法
  • 备注:任何对象都能使用Object进行接收。

  • equals方法具有对称性,即a.equals(b)和b.equals(a)的效果一样

  • 如果比较双方一个常量一个变量,推荐把常量字符串写在前面;

    • 推荐:"aba".equals(str)
    • 不推荐:str.equals("aba")
  • equalsIgnoreCase方法忽略大小写;

  • package com.three;
    /*
     * == 进行的是对象的地址值比较
     * public boolean equals(Object obj):参数可以是任何对象;只有参数是一个字符串并且内容相同才会返回true,否则返回False
     * 注意事项:任何对象都能用Object接收
     * 
     * */
    public class DemoStr {
    	public static void main(String[] args) {
    		String str1="abc";
    		String str2="abc";
    		char[] arr = {'a','b','c'};
    		String str3=new String(arr);
    //		System.out.println(str1==str2);
    //		System.out.println(str3==str2);
    //		System.out.println(str2==str3);
    		System.out.println(str2.equals(str1));
    		System.out.println(str2.equals(str3));
    		System.out.println("abc".equals(str3));//推荐写法
    		System.out.println(str3.equals("abc"));//不推荐写法,容易报出空指针异	
    //		===========
    		//空指针异常
    //		String str4=null;
    //		System.out.println(str4.equals("abc"));
    		/*java.lang.NullPointerException
    		at com.three.DemoStr.main(DemoStr.java:27)*/
    		String str5="aBc";
    		System.out.println(str2.equals(str5));//FALSE
    		System.out.println(str2.equalsIgnoreCase(str5));//true
    	}
    }
    /*console
     * true
    true
    true
    true
    false
    true
     */
    
7.5 String当中与获取相关的方法有
  • 长使用方法

  • public int length():获取字符串中的字符个数,获取字符串的长度
    public int indexOf(String str):查找参数字符串在中本字符串中首次出现的索引位置,没有则返回-1
    public String concat():将当前的字符串和参数字符串拼接成为新的字符串,并返回新的字符串
    public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始)
    
  • 示例

    package com.three;
    
    public class DemoStringGet {
    
    	public static void main(String[] args) {
    		int strlen="ABCDEFG".length();
    		System.out.println("字符串的长度是"+strlen);
    		int index ="Hello world".indexOf("llo");//2
    		System.out.println(index);//2
    		String str="Hello world".concat("WUSIR");
    		System.out.println(str);//Hello worldWUSIR
    		char ch="Hello world".charAt(6);
    		System.out.println(ch);//w
    	}
    }
    
7.6 字符串的截取方法
  • 常见的方法

  • public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串
    public String substring(int begin,int end):截取从begin开始到end结束,取头不取尾
    
  • package com.three;
    
    public class DemoStringSub {
    
    	public static void main(String[] args) {
    		String str1="Hello world";
    		System.out.println(str1.substring(3));
    		System.out.println(str1.substring(3, 7));
    		System.out.println(str1);//字符串不发生改变;
    	}
    }
    /*
    console:
    lo world
    lo w
    Hello world
    */
    
  • image-20211101200606168

7.7字符串的转换方法
  • package com.three;
    /*
     public char[] toCharArray():把当前字符串拆分成字符数组作为返回值
     public byte[] getBytes();获得当前字符串的底层字节数组
     public String replace(CharSequence oldString;CharSequence newString):将所有出现的老字符串替换成为新的字符串,返回替换之后结果字符串
     备注:CharSequence是接口可以接受字符串类型
     
     */
    public class DemoStringConvert {
    	public static void main(String[] args) {
    		//转换为字符数组
    		char[] chars ="hello".toCharArray();
    		System.out.println(chars[0]);
    		
    		//转换为字节数组
    		byte[] bytes="abc".getBytes();
    		for(int i=0;i<bytes.length;i++){
    			System.out.println(bytes[i]);
    		}
    		System.out.println("==================");
    		String str1="Hhello do do do weide";
    		String str2=str1.replace("do", "new");
    		System.out.println(str2);
    	}
    }
    
7.8字符串的分割方法
  • package com.three;
    /*
     分割字符串的方法
     public String[] spilt(String regx):按照字符串规则将字符串切分为若干部分
     注意事项:
     split方法的参数其实是一个正则表达式,使用英文的.进行切分需要转义写成\.
     * */
    public class DemoStringSpilt {
    
    	public static void main(String[] args) {
    		String str1="aaa,bbb,ccc";
    		String[] strarry=str1.split(",");//按照逗号进行分割;
    		for(int i=0;i<strarry.length;i++){
    			System.out.println(strarry[i]);
    		}
    		System.out.println("=========");
    		String str2="aaa.bbb.ccc";
    		String[] strarry2=str2.split("\.");//按照逗号进行分割;
    		for(int i=0;i<strarry.length;i++){
    			System.out.println(strarry2[i]);
    		}
    	}
    
    }
    /*Console
    aaa
    bbb
    ccc
    =========
    aaa
    bbb
    ccc
    */
    
原文地址:https://www.cnblogs.com/Blogwj123/p/15496224.html