一、匿名内部类
匿名内部类时局部内部类的简写,使用代码如下:
public abstract class Animal {
public abstract void eat();
}
public interface MyInterFace {
public abstract void method();
}
public class Dog {
public Animal dshow(){
return (new Animal() {
@Override
public void eat() {
System.out.println("匿名内部类作为返回值");
}
});
}
public MyInterFace dshow1() {
return (new MyInterFace() {
@Override
public void method() {
System.out.println("匿名内部类作为返回值");
}
});
}
}
public class Test {
public static void main(String[] args) {
//匿名内部类作为show()的形参第一种形式
show(new Animal() {
@Override
public void eat() {
System.out.println("匿名内部类直接作为方法的形参");
}
});
System.out.println("-----------------------------------");
//匿名内部类作为show()的形参第二种形式
Animal an1=new Animal() {
@Override
public void eat() {
System.out.println("匿名内部类间接作为方法的形参");
}
};
show(an1);
System.out.println("-----------------------------------");
//匿名内部类作为返回值
Dog dog=new Dog();
Animal an2=dog.dshow();
show(an2);
System.out.println("-----------------------------------");
Dog dog1=new Dog();
MyInterFace my =dog1.dshow1();
show1(my);
}
public static void show(Animal an){
an.eat();
}
public static void show1(MyInterFace my){
my.method();
}
}
需要注意的是:向下转型
二、Scanner类
三、Object类
四、String类
注意:(1)对String类的特点:字符串被创建,其值不在改变,改变的是其引用的值,利用内存图对其进行详解:
(2)对String s=new String(“hello”)和String s1=”hello”的区别,利用内存图展示:
(3)理解好含左不含右的意义。
五、StringBuffer类
(1)String和StringBuffer的相互转换,代码如下:
public class StringBufferTest2 {
public static void main(String[] args) {
//String-----StriingBuffer
String str="sgjjlk";
StringBuffer stringBuffer1 = new StringBuffer(str);
StringBuffer stringBuffer2 = new StringBuffer().append(str);
System.out.println(stringBuffer1);
System.out.println(stringBuffer2);
System.out.println("-------------------------------");
//StringBuffer-------String
StringBuffer s1 = new StringBuffer("cvhjbjk");
String s2 = s1.toString();//toString()是转换为字符串输出
System.out.println(s2);
String s3 = s1.substring(0);//substring()截取字符串,返回的是字符串类型
System.out.println(s3);
}
}
(2)String和StringBuffer的作为形参的区别,代码如下:
public class StringBUffertest3 {
public static void main(String[] args) {
/*String 作为形参,虽然是引用类型,但是是一个常量,
可以作为基本数据类型进行数据传递,但是其形参的改变不会改变实参的值
* */
String str="asdfg";
setString(str);
System.out.println(str);
/**
* StringBuffer作为形参,其是引用类型,形参的改变会影响实参的改变
*/
StringBuffer s= new StringBuffer("asdfghjkl");
setStringBuffer(s);
System.out.println(s);
}
public static void setString(String str){
str = str.replace('d', 'e');
System.out.println(str);
}
public static void setStringBuffer(StringBuffer str){
str=str.append("asdf").replace(2,5,"ty");
System.out.println(str);
}
}
六、包装类Integer
(1)int与String的相互转换代码:
public class Test {
public static void main(String[] args) {
//int ------------String
int num=1000;
//字符串的拼接
String str="";
str+=num;
System.out.println(str);
System.out.println("-----------------------");
//valueOf(),将任意的数据类型转换为字符串
String s = String.valueOf(num);
System.out.println(s);
System.out.println("-----------------------");
//int---Integer---String
Integer i1 = new Integer(num);
String s1 = i1.toString(num);//toString()必须对象调用方法
System.out.println(s1);
System.out.println("-----------------------");
//String-----int
String st="111111";
Integer in1 = new Integer(st);
int in2 = in1.intValue(); //不是静态方法,返回的是int型数字
System.out.println(in2);
System.out.println("----------------------");
int in3 = Integer.parseInt(st); //静态的方法,只能通过类名来调用
System.out.println(in3);
}
}
特别注意,静态方法的调用时类名调用而不是对象的调用。
七、数组排序
(1)冒泡排序代码:
import java.util.Arrays;
public class MaoPaoSort {
public static void main(String[] args) {
int[] arr={24,69,80,57,13};
sort(arr);
}
public static void sort(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
(2)选择排序代码
public class XUanZeTest {
public static void main(String[] args) {
int[] arr={24,69,80,57,13};
sort(arr);
}
public static void sort(int[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j ];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
(3)二分法排序代码:
public class ErFenFa {
public static void main(String[] args) {
int[] arr={12,54,2,4,89};
sort(arr);
int index=erfenfa(arr,4);
System.out.println(index);
}
public static void sort(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
public static int erfenfa(int[] arr,int value){
int minIdex=0;
int maxIndex=arr.length-1;
int midIndex=(minIdex+maxIndex)/2;
while(minIdex<=maxIndex) {
if (value == arr[midIndex]) {
System.out.println("找到对应的值,索引值为:" );
return midIndex;
} else if (value < arr[midIndex]) {
maxIndex = midIndex - 1;
} else {
minIdex = midIndex + 1;
}
midIndex=(minIdex+maxIndex)/2;
}
return -1;
}
}
八、体会:
这部分内容真心是多,记住了又会忘记,忘记了继续记,记了三天,仍然没有全部记住,只能在后期的使用中再次加强记忆了。
总之,语言还是要多敲代码才能有效的理解。