• 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
      */
      
  • 相关阅读:
    重复点击的解决方案
    判断window.open的页面是否已经被关
    npm run dev 报错 版本太低
    :after 写三角形 border
    input text 在苹果微信浏览器中有上上阴影
    input实时监听
    pre强制 自动换行
    解决iphone safari上的圆角问题
    ACM: 强化训练-Roads in the North-BFS-树的直径裸题
    ACM: 强化训练-Inversion Sequence-线段树 or STL·vector
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15496224.html
Copyright © 2020-2023  润新知