1、== 与 equals 的区别
==比较的是引用地址(两个引用是否指向同一个对象)
equals可以从以下两个方面来说明:
第一个方面:由于equals它是父类Object所定义的方法。从Object角度来看,equals 与 == 的用法相同,都是用来比较引用地址的。
第二个方面:对于其他的类来说,可以在类中重写equals方法,从而实现判断内容是否相等的逻辑。比如String类重写了equals方法,所以使用equals方法比较的是字符串内容是否相等。
2、this 与 super的区别
this 表示 当前类的对象; super 表示 当前类的父类。
具体区别:
2.1 this 访问当前类的属性,此类中没有该属性则从父类中查找;super 访问父类的属性
2.2 this 访问当前类的方法,此类中没有该方法则从父类进行查找;super 访问父类的方法
2.3 this 可以调用当前类的成员变量;也可以调用父类的成员变量
super 调用父类的成员变量。
this 可以调用当前类的成员方法;也可以调用父类的成员方法
super 可以调用父类的成员方法
this 可以调用当前类的构造方法,务必放在构造方法的第一行;
super调用父类的构造方法,务必放在父类构造方法的首行。
注意:this()和super()都要放在构造方法的第一行,所以两个不能够同时出现在一个构造方法中。
3、static不能够定义局部变量。static定义的静态变量一定是成员变量。普通方法内部不能够出现静态变量。
4、abstract 能够修饰方法和类,但是不能够修饰字段。
5、编程题1——排序问题(注意数组越界问题)
【排序子序列】
牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。
牛牛有一个长度为n的整数数组A,他现在有一个任 务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2
思路:
把数组中元素进行遍历,共三种情况升序,降序或者相等。升序或者降序都要遍历到最后一个不再进行升序或者降序的元素。此时使得不同排序序列的个数加1,同时遍历到下一个元素。需要注意的一点是:在遍历过程中要特别注意数组出现越界的情况----防止i+1出现越界情况。
具体编程如下:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
//数组元素定义为a+1个,防止出现数组越界的情况
int[] n = new int[a+1];
for (int i = 0; i < a ; i++) {
n[i] = scanner.nextInt();
}
//记录数组被分为几组
int count = 0;
int i = 0;
//遍历数组元素,寻找升序或者降序处count加1
while (i < a){
//这个下标元素比下一个下标元素大
if( i<a && n[i] > n[i+1]){
//如果接下来还大继续遍历,直到不满足这个条件
while (i<a && n[i] > n[i+1]){
i++;
}
//遍历结束说明不再是降序排序,那么count加1,继续遍历数组元素
count++;
i++;
}
//这个下标元素与下一个下标元素一样大
if(i<a && n[i] == n[i+1]){
//此时并无升序或者降序,count不用增加
i++;
}
//这个下标元素比下一个下标元素小
if(i<a && n[i] < n[i+1]){
//如果接下来还小继续遍历,直到不满足这个条件
while (i < a && n[i] < n[i+1]){
i++;
}
//遍历结束说明不再是降序排序,那么count加1,继续遍历数组元素
count++;
i++;
}
}
System.out.println(count);
}
}
6、编程题2——字符串分割、StringBuilder添加元素
【倒置字符串】
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
思路:
将字符串以空格为分隔符进行分割,然后存放到一个字符数组中。
因为要倒置输出,所以逆序遍历,将其添加到StringBuilder中,然后输出即可。
具体编程如下:
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
StringBuilder ss = new StringBuilder();
//以空格为分隔符把字符串分开
String[] s = str.split(" ");
//逆序遍历数组,然后把它们添加到ss中,再输出
for (int i = s.length-1; i >=0; i--) {
ss.append(s[i]+" ");
}
System.out.println(ss);
}
}