【java高级程序设计】[实验代码学习]高级特性||反射||泛型||枚举||接口新定义||方法引用

30 篇文章 1 订阅
16 篇文章 0 订阅

我说,别白嫖。 

目录

一、 反射

三种方式获取实例化对象!

!注意格式:forName("里面要写包名.类名")

!注意抛出异常: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;

深入理解Java双冒号(::)运算符的使用_扬帆舟的博客-CSDN博客Jdk8中有好多新的特性,比如引入Lambda,简化代码的书写等等我们先看一个关于Lambda的使用/*** 输出list */@Testpublic void test() {String[] array = {&amp;amp;amp;amp;quot;aaaa&amp;amp;amp;amp;quot;, &amp;amp;amp;amp;quot;bbbb&amp;amp;amp;amp;quot;, &amp;amp;amp;amp;quothttps://blog.csdn.net/zhoufanyang_china/article/details/87798829?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163429038116780264084293%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163429038116780264084293&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-87798829.first_rank_v2_pc_rank_v29&utm_term=java++%EF%BC%9A%EF%BC%9A&spm=1018.2226.3001.4187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值