我说,别白嫖。
目录
!注意抛出异常:forName方法使用时一定要抛出异常,否则会报错
!注意:定义泛型方法(注意泛型数组返回格式;参数数量不定时的输入格式
!注意:方法引用 函数式接口的注释:@FunctionalInterface!注意:"::"的使用
一、 反射
三种方式获取实例化对象!
getClass()
forName("xxx")
.class
public class Member {
}
package basic;
/**
* @Author: y9
* @Date: 2021/10/15
* @Description: reflect
**/
public class javaReflectDemo {
public static void main(String[] args) throws Exception{
Member member = new Member();
//通过【对象】实例获取【类】实例
Class<?> clazz = member.getClass();
System.out.println("getClass()方法:"+clazz);
//.class方法
Class<?> clazz2 = Member.class;
System.out.println(".class方法:"+clazz2);
//一定要抛出异常!
// forName(xx)方法
Class<?> clazz3 = Class.forName("basic.Member");
System.out.println("forName(xx)方法:"+clazz3);
//三个结果输出相同:class basic.Member
}
}
!注意格式:forName("里面要写包名.类名")
!注意抛出异常:forName方法使用时一定要抛出异常,否则会报错
二、 泛型
package basic;
/**
* @Author: y9
* @Date: 2021/10/15
* @Description:
**/
public class Message<T> {
private T content;
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
}
public interface IMessage<T>{
public String echo(T msg);
}
public class MsgImpl<S> implements IMessage<S>{
@Override
public String echo(S s) {
return "[echo]" + s;
}
}
package basic;
/**
* @Author: y9
* @Date: 2021/10/15
* @Description: 泛型
**/
public class JavaDemo {
public static void main(String[] args) {
Message<String> msg = new Message<String>();
msg.setContent("通过<?>接受:"+"www.sina.cn");
fun(msg);
//输出:通过<?>接受:www.sina.cn
IMessage<String> msg2 = new MsgImpl<String>();
System.out.println(msg2.echo("通过实现泛型接口:"+"www.sina.cn"));
//输出:[echo]通过实现泛型接口:www.sina.cn
Integer num[] = fun2(1,2,3);
System.out.print("定义泛型方法:");
for (int temp: num) {
System.out.print(temp+"、");
}
//输出:定义泛型方法:1、2、3、
}
public static void fun(Message<?> temp){
//参数类型泛型写<?>而不是<T>
System.out.println(temp.getContent());
}
public static <T> T[] fun2(T...args){
//!!定义泛型方法(注意泛型数组返回格式;参数数量不定时的输入格式
return args;
}
}
!注意:参数类型泛型写<?>而不是<T>
!注意:定义泛型方法(注意泛型数组返回格式;参数数量不定时的输入格式
public static <T> T[] fun2(T...args){
return args;
}
三、 枚举
public interface IMessageEnum {
public String getMsg();
public void send(String s);
}
package basic;
/**
* @Author: y9
* @Date: 2021/10/15
* @Description:
**/
public class EnumDemo {
public static void main(String[] args) {
IMessageEnum msg = Color.RED; //对象向上转型
System.out.println(msg.getMsg()); //输出:红色
}
}
!注意:有继承时,获取对象要向上转型获取
四、 接口新定义
package basic;
public interface IMessageNew {
public String msg();
public default boolean connect(){
System.out.println("建立新浪sina消息连接通道");
return true;
}
public static IMessageNew getInstance(){
return new IMsgNew();
}
}
package basic;
public class IMsgNew implements IMessageNew{
@Override
public String msg() {
if(this.connect())
return "www.sina.cn";
return "no messages sent.";
}
}
package basic;
/**
* @Author: y9
* @Date: 2021/10/15
* @Description: 接口方法的demo
**/
public class instanceDemo {
public static void main(String[] args) {
IMessageNew msg = IMessageNew.getInstance();
System.out.println(msg.msg());
//输出:
// 建立新浪sina消息连接通道
// www.sina.cn
}
}
五、 方法引用|函数式接口(不太会)
package basic;
@FunctionalInterface //函数式接口
public interface IFunction <P,R>{
public R change(P p);
}
package basic;
/**
* @Author: y9
* @Date: 2021/10/15
* @Description: 接口方法的demo
**/
public class instanceDemo {
public static void main(String[] args) {
IFunction<Integer,String> fun = String::valueOf;
String str = fun.change(100); //利用change()表示valueOf()
System.out.println(str.length());
//输出: 3
}
}
!注意:方法引用 函数式接口的注释:@FunctionalInterface
!注意:"::"的使用
IFunction<Integer,String> fun = String::valueOf;