一、Arrays工具类
1.数组地址的比较
int [] arr1={1,2,3,4,5}; int [] arr2={1,2,3,4,5}; System.out.println(arr1==arr2);//结果是false因为其比较的是地址数组不能用==判断 int [] arr1={1,2,3,4,5}; int [] arr2=arr1; System.out.println(arr1==arr2);//结果是true因为arr1把地址赋给arr2
2.Arrays.equals(arr1,arr2);
接受两个数组,返回两个数据是否相等。比较的原理是,逐一比较两个数组的每一个值,是否相等。而如果使用==,是比较两个数组名中存储的地址,是否相等。
int [] arr1={1,2,3,4,5}; int [] arr2={1,2,3,4,5}; System.out.println(Arrays.equals(arr1, arr2));
3.Arrays.sort();
对数组进行升序排列,会直接修改原数组的内容。
int []a={1,5,6,2,3,10,8}; Arrays.sort(a); System.out.println(Arrays.toString(a));
4.Arrays.sort();
对数组的指定区域进行排序,左闭右开区间,包含起始下标,不含下标。
int []a={1,5,6,2,3,6,10,8}; Arrays.sort(a,3,6); System.out.println(Arrays.toString(a));
5.Arrays.toString();
将数组转成字符串,转换之后的格式[1,2,3,4]。
6.Arrays.fill(a, 12);
将数组的每一项,都赋值给指定的数值。
int []a=new int[10]; Arrays.fill(a, 12); System.out.println(Arrays.toString(a));
7.int []b=Arrays.copyOf(a, 10);
将a[]的指定个数,copy到一个新的数组;如果个数>a.length则新数组中多余的位置默认值补齐,如果个数<a.length则copy原数组的前半部分。
int a[]={1,2,3,4,5,6,7,8,9}; int []b=Arrays.copyOf(a, 5); System.out.println(Arrays.toString(b));
8.Arrays.binarySearch(a,1);
查找数组中的指定元素,如果找到返回下标,否则返回负数,使用这个方法,必须是有序的数组,可以用Arrays.sort()进行排序。
int []a={0,2,2,3,4,5,6}; Arrays.sort(a); System.out.println(Arrays.binarySearch(a,1));//相当于二分法需要排序后使用
9.二维数组的声明
int a[ ][ ] = new int[2][ ]; a[0] = new int[3]; a[1] = new int[5];
int [][]a={{1}, {1,2}, {1,2,3}, {1,2,3}}; for(int i=0;i<a.length;i++){//a.length=====>>>>a[i] for(int j=0;j<a[i].length;j++) {//a[i].length======>>>>a[i][j] System.out.print(a[i][j]+"\t");//不用Arrays.toString } System.out.println(); }
二、String类
1.String类声明
/** * [String类]位于java.lang包,java.lang是Java的语言包,使用时无须导包,自动导入,无import * 2.拿到一个字符串对象 * (1)字面量声明String s="Hello World"; * (2)new关键字声明 String s1=new String("Hello World"); */ String s="Hello World"; String s2=new String(); String s1=new String("Hello World"); System.err.println(s1);//err.红色的
2.String类的length()方法(字符串的长度)
/** * s.length()返回字符串的长度,.length()是一个方法,使用时不能掉() */ System.out.println("请输入用户名:"); Scanner in=new Scanner(System.in); String s=in.next(); if(s.length()<6){//带括号的是方法,不带括号的是属性 System.out.println("用户名最小为6位"); }
3.String类的equals()方法
/** * 字符串不是引用数据类型 * s1.equals(s2)判断字符串是否相等 * * .equals()的比对原理,是判断两个字符串的为一个字符是否相等。 * ==的比对原理,是判断两个字符串中存储的地址是否相等。 */ String s1="123"; String s2="123"; String s3=new String("123"); String s4=new String("123"); System.out.println(s1==s2);//比地址 System.out.println(s1==s3); System.out.println(s1==s4); System.out.println(s2==s3); System.out.println(s2==s4); System.out.println(s4==s3); System.out.println(s1.equals(s4));//比较内容 System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s2.equals(s3)); System.out.println(s2.equals(s4)); System.out.println(s3.equals(s4)); String s6=s1;//s1不会变 s6="456"; System.out.println(s1); String s5=s3;//s3不会变 s6="456"; System.out.println(s3);
4.String类的equalsIgnoreCase()方法(忽略大小写的比较)
/** * s.equalsIgnoreCase(s1)忽略大小写比对 */ String s="JH"; String s1="jh"; System.out.println(s.equals(s1)); System.out.println(s.equalsIgnoreCase(s1)); //忽略大小写比对JH=jh
5.String类的toLowerCase()和toUpperCase()方法(将字符串转成大小写)
/** * s.toLowerCase()将所有字符转换成小写 * s.toUpperCase()将所有字符转换成大写 */ String s="JH"; String s1="jh"; System.out.println(s.equals(s1)); System.out.println(s.equalsIgnoreCase(s1)); //忽略大小写比对JH=jh System.out.println(s.toLowerCase()); System.out.println(s.toUpperCase()); System.out.println(s.toLowerCase().equals(s1));
6.String类字符串的连接
/** * 1.使用+ * 2.String s1=s.concat(s2);连接,将s1和s2连接,将s2连接到s1的后面,返回一个新字符串 */ String s="哈哈"; String s1=s.concat("真帅"); System.out.println(s1);
7.String类的IndexOf()方法
/** * .indexOf()在字符串中查找指定的字符或子串,并返回其下标,否则返回-1; * 可以接受字符串,字符,整数类型的参数,如果传入整数,将根据ASXII码自动转为字符(A-65,a-97) * * * .lastIndexOf()在字符串中查找指定的字符或子串最后一次出现的位置,并返回其下标,否则返回-1 */ String s="abcdefffg"; System.out.println(s.indexOf("cde"));//2 System.out.println(s.indexOf("cdf"));//-1不连续 System.out.println(s.indexOf(100));//a的阿斯科码值为97,3的为100 System.out.println(s.lastIndexOf("cdf")); System.out.println(s.lastIndexOf("f"));
8.String类的substring()方法
/** * substring()截取字符串的指定位置,返回一个新的子串 * (1)传入一个参数,表示起始下标,将从此下标开始,一直截到字符串以后 * (2)传入两个参数,表示起始下标和结束下标,为左闭右开,包含起始不含结尾 */ String s="abcdefg"; System.out.println(s.substring(3)); System.out.println(s.substring(3,5));//左闭右开
9.String类的trim()方法
/** *.trim()去掉字符串两端的空格 */ String s=" abcdefg "; System.out.println(s); System.out.println(s.trim());
10.String类的replace()方法
/** * replace将字符串中的指定区域,用新的字符串替换掉 */ String s="abcdefg"; System.out.println(s.replace("abc","niu"));
11.String类的split()方法
/** * .split()传入指定字符,将字符串分割为多个子串,返回一个字符串类型的数组; * 如果传入一个空字符串,则将原字符的每一个字符进行分割 * * .split( , )第二个参数,可以传入一个整数,表示将当前字符串分为几部分 * 如果传入的整数,小于原来分割的总部分,则剩余的 */ String s="haha haha haha"; String [] a=s.split(" "); System.out.println(Arrays.toString(a)); String []b=s.split("h", 3); System.out.println(Arrays.toString(b));
12.String类的charAt()方法
/** * charAT();用法 * * / int j=0; Scanner in=new Scanner(System.in); String n=in.next(); char a=in.next().charAt(0); for(int i=0;i<n.length();i++){ if(n.charAt(i)==a){ j++; } } System.out.println(j);
三、StringBuffer类
1.StringBufferl类的声明
/** * StringBuffer声明 * [StringBuffer类] * 1.[StringBuffer是String的增强版,位于java.lang包中] * 2.StringBuffer与String的最大区别在于:StringBuffer是可变可追加的 * 而String一旦声明不可改变,不能插入; */ StringBuffer sb=new StringBuffer("hahah");
2.StringBuffer类的toString()方法
/** * .toString:将StringBuffer类型转换成String类,但在输出时,可以不用转换, *将自动进行转换 */ String s=sb.toString(); System.out.println(sb);
3.StringBuffer类的append()方法
/** * .append()在原字符串的最后追加新的字符 * 原字符串会被直接改变,同时还会将追加之后的字符串返回 * append可以接受各种类型的参数,会自动转成字符串后追加到原字符串后 */ StringBuffer sb1=sb.append("呵呵呵"); System.out.println(sb); System.out.println(sb1); char []a={'a','b','c','d'}; StringBuffer sb2=sb.append(a,1,2);//(a,b,c)b是起始下标,c是几个 System.out.println(sb2);
4.StringBuffer类的删除方法
/** * delete();传入两个下标,表示删除了这两个下标的字符,左闭右开区间 * * .deletCharAt()传入一个下标,删除一个指定位置的字符 */ StringBuffer sb=new StringBuffer("帅不帅你说了不算");//左闭右开区间 StringBuffer s =sb.delete(0, 2); System.out.println(s); StringBuffer s1 =sb.deleteCharAt(2); System.out.println(sb); System.out.println(s1);
5.StringBuffer类的insert()插入方法
/** * 在原字符串的指定下标位置,插入新的子串 * 新的字符串可以是任何数据类型, */ StringBuffer sb=new StringBuffer("帅不帅你说了不算");//左闭右开区间 StringBuffer s=sb.insert(3, "可能"); System.out.println(sb); System.out.println(s);
四、面向对象
1.面向对象的解释以及使用类和对象的步骤
/** * 面向对象&面向过程 * 0.面向机器语言:汇编语言。 * 1.面向过程: * 面向过程专注于如何解决一个问题的过程。 * 编程特点:出现了一个个的函数,由一个个函数实现解决问题的一系列步骤。 * 2.面向对象: * 面向对象专注于有谁(哪个)来解决问题,而调用者无需关注对象实现的细节。 * 编程特点:出现了一个个类,从类中拿到对象,通过对象直接解决问题。 * Java php C++ C# Python * * * [类&对象] * 1.类:具有一系列相同属性(特征)和方法(行为)的个体的集合,称为类。 * 类是一个抽象的概念,只能说类具有哪些属性,不能直接对属性进行赋值。 * 例如:人类由身高的属性,但是不能说人类的身高是180。 * 2.对象:从类中拿出具有具体属性值的个体,称为对象。 * 对象是从类中哪出的一个具体的个体,需要对属性进行具体的赋值。 * 例如:人类由身高的属性,那么说张三是人类中的一个个体,张三的身高是180,张三是人类中的一个对象。 * 3.类和对象的关系: * 类是对象的抽象化(类有属性,但不能给类的属性赋值),对象是类的具体化。 * 类是对象的描述,对象是类的个体(对象是类的实例)。 * 程序中由类产生对象。 * 4.面向对象的三个特征:继承,封装,多态。 * 判断编程是不是面向对象,就要看符不符合继承,封装,多态。(js不能实现多态) * 从类中new出一个对象,类的实例化。 * * * [使用类和对象的步骤] *1.声明一个类: * public class Person(){ * public String name;//属性 * public void say(){}//方法 *} * 2.使用对象名.属性名或对象名.方法名,调用类中的属性和方法。 * p.say();//调用方法 * System.out.println(p.name);//调用属性 */ String s=new String("哈哈哈"); //对象的实例化通过new关键字拿到一个类的对象,使用对象名.方法名,可以调用类中已经声明的方法 Person p=new Person("张三", 5); p.say(); System.out.println(p.name);
2.方法的返回值
如果方法有返回值,可以使用return返回结果;
如果方法没有返回值,需要设置返回值为void,而且方法中必须没有return;
有返回值的方法,调用时不一定必须接收返回值;
没有返回值的方法,调用时一定不能接收返回值;
public void sya(){ (无返回值) } public People say(int num.String name ){ return null;(有返回值) }
3.方法的调用
/* * * [方法的调用] * 1.声明的方法,只有在调用的时候才能执行方法中的代码 * 2.方法的调用: * 在本类的其他方法中调用:使用方法名();或者使用this.方法名(); * public void eat(){ * say(); * // this.say(); * } * * 调用其他类的方法:首先应该实例化拿到对象,在通过对象名调用方法 * JCMethod1 dm=new JCMethod1(); * // int num=dm.say(); * // System.out.println(num); * // dm.eat(); * dm.eat(); */
4.方法的参数
(1).声明方法时,也可以在()设置调用方法时需要传入的参数列表,多个参数之间用逗号隔开;
public void eat(String food,int i)
声明方法时的参数列表,称为形参列表;
(2).调用方法时,必须按照形参列表的要求,一一传入对应的参数;
dm.eat("鸡蛋灌饼",12);
调用方法时的参数列表,成为实参列表;
5.成员变量&局部变量
(1).成员变量:写在方法体外,直接在类中生命的属性,称为成员变量。
成员变量的作用范围:在整个类中使用。
(2).局部变量:在方法体里面声明的变量叫局部变量。
局部变量只在当前方法中有效,方法的形参列表,都属于局部变量。
(3).成员变量和局部变量的区别:
(1)作用于不同。
(2)初始值不同,java中成员变量默认初始值,局部变量没有默认初始值。
(3)优先级不同,就近原则,当成员变量和局部变量重名时,在方法中优先使用局部变量。
如果需要使用成员变量,需要使用this.进行使用。
public String name="zhangsan";//成员变量 public void eat(String food,int i){ String name;//局部变量 System.out.println("我叫"+this.name); }
6.类的定义
(类名要用public修饰)声明一个类:
*[访问控制符]class 类名{}
*public class Person{}
*注意类名的命名规范
7.声明一个属性
/** * 声明一个属性,[访问控制符]属性类型 属性名 */ public String name; public int age;
8.构造函数
/** * 构造函数:是类中的一个特殊方法 * 1.构造函数与类同名 * 2.构造函数没有返回值,连void都没有 * * 如果没有手动写构造函数,则系统会默认提供一个空参构造; * 如果手动写构造函数,则系统不再提供空参构造。 * * 构造函数无需我们手动调用,而是在实例化对象时,自动调用构造函数 * 构造函数的作用:在实例化对象的时候,给类的属性赋默认值 */ public Person(String name,int age){ //使用this.属性表示使用本类的属性 this.name="默认名称";//name参数,this.name this.age=0; System.out.println("调用构造函数"); }
9.声明方法
/** * 声明一个方法,[访问控制符] 返回值类型 方法名(){} * * 如果没有返回值,用void代替 */ public void say(){ System.out.println("我是人类,我会说话。"); System.out.println(this.name+this.age); }