学习目的
比较是否用接口来实现数据的回调,以及如何在实现数据回调操作过程中选择抽象类、普通类、接口
定义 Setting Read MyClass Message 这几个类,在Read和Message里面能够对Setting里面的数据能够实现回调
相关技术、及其使用方法
1、通过定义方法实现数据回调:
例如:
//提供给外部一个方法可以通过这个 方法给我传值
public void change(String color,int size){
System.out.println("改变前的颜色:"+this.color+"改变前的大小:"+this.size);
this.color = color;
this.size = size ;
System.out.println("改变后的颜色:"+this.color+" "+"改变后的大小:"+this.size);
}
优点:对于调用数据较少时,通过定义外部方法实现数据回调是一种比较实际 、并且可用的方法
缺点:当调用数据比较多的时候,就必须在每个需要回调数据的对象里面定义方法,虽然也可以用定义外部方法实现回调,但是,会造成代码较多,在无形中增加了代码的阅读量,同时当修改代码是也增加了许多麻烦。
2、通过定义接口:
例如:
//使用接口定义一套方法 强制使用者来实现这个方法
public interface FontSettingInterface{
//自己规定的方法
void change(String color,int size);
}
public void startSetting() {
System.out.println("开始设置");
System.out.println("设置成功");
obj.change("黑色",20);
}
因为,我们在需要进行数据回调的时候基本上都是用的要进行同一种方法的实现 ,所以通过定义接口使这些方法定义在接口里面,让他们在要实行回调的对象里面去实现。
相比之下,定义接口来实现函数的回调简化了代码,减少了出错的几率,使代码更具有结构化,简单明了
3、抽象类、普通类、接口三者之间如何选择
1.是否需要添加成员变量 需要:抽象类 普通类 不需要: 接口
2.添加的方法是不是必须要实现 必须 :抽象类 接口 不需要 ;普通类 抽象类里面的普通方法
3.是需要提供模板还是提供通讯方式 模板 :抽象类 通讯 (通讯传递):接口
4、Java里面系统提供的Class
String:
String String字符串是不可变的 他们可以被共享(两个字符串相同时 地址才相同 相同才能被共享)
1、不可变得字符串 一旦创建 内容不能改变
2、 == 比较两个对象是否相同地址
equals 比较内容是否相同
3、字符串的创建
String str = "abc"常量字符串
StringBuffer可变字符串 线程安全 效率不高
StringBuilder 可变字符串 线程不安全 效率高
例如:提供一些字符串的定义方式
String str ="abc";
String str1 = "abc";
System.out.println(str == str1);
System.out.println(str.equals(str1));
//构造方法
//null 和 ""的区别 创建一个字符串 但是没有字符
String str3 = new String();//没意义
//使用字节数组 创建一个字符串
byte[] name = {'a','b','c'};
String str4 = new String(name);
System.out.println(str4);
//使用字节数组里面的一部分 创建一个字符串
String str6 = new String (name,0,2);
System.out.println(str6);
char [] hello = {'你','好','啊'};
String h = new String(hello);
System.out.println(h);
字符串中的相关操作:
charAt 获取一字符串:
char c = h.charAt(0);
System.out.println(c);
compareTo 比较字符串之间的关系:等于0 相同、 小于0 小于 、大于0 大于
int reult = str4.compareTo(str6);
System.out.println(reult);
concat 字符串之间的连接:
String nStr = str4.concat(h);
System.out.println(nStr);
contains 判断一个字符串是否包含另一个字符串
boolean r = "hello".contains("lle");
System.out.println(r);
endWith 和 startWish 判断是否由某个字符串结尾或者开头
String url = "http://www.baidu.com";
if(url.endsWith("com")){
System.out.println("网址");
}
if(url.startsWith("http")){
System.out.println("http协议");
}
if(url.startsWith("www",7)){
System.out.println("万维网");
}
equals用于两个字符串之间的比较,字符串相同表示两者的是共享的
//equals
if("abc".equals("ABC")){
System.out.println("相同");
}else {
System.out.println("不相同");
}
append(在末尾追加)、replace(替换)、insert(插入数据)
sb.append("I");
sb.append("Love");
sb.append("Android");
System.out.println(sb);
//insert 插入数据
sb.insert(2,"also");
System.out.println(sb);
//repalce 替换
//start end string
int start = sb.indexOf("Android");
int end = start + "Android".length();
sb.replace(start,end,"you");
System.out.println(sb);
感想
今天讲了一些系统提供的Class和用接口实现数据回调这个功能,虽然接口实现回调比较简单、但是还是有点不够理解,从开始到学习Java这些天感觉自己接收到的信息要比大一在学习这方面接收的信息都还要多,一下子还是有点消化不完,甚至在和同学交流的时候,常会提到学习这些到底有啥子用这个问题,感觉有时候根部不需要学的这么多,但是,既然来了就要坚持,多一种技术,就是在将来多一条路。