Java类的基本组成和使用

Java类的基本组成和使用,第1张

Java类的基本组成:java由一系列的接口和类组成,所有类的父类是:object。对象的生成:使用new关键字产生对象,该对象类中构造方法就是用来产生对象的。对象由一系列的属性和行为构成。使用和删除:对象构成之后,就可以使用对象点方法、属性进行 *** 作,问删除,如果对象失去了引用的指向,会自动被GC(垃圾回收机制)回收。接口与包:接口(行为的抽象),实现接口,必须实现接口的方法,哪怕是空实现,目前我见过唯一一个没有实现的类就是:>

Java 是由Sun 公司于1995年5月推出的高级程序设计语言,2009年,甲骨文公司宣布收购Sun公司,java就成了甲骨文公司的了

java包含3个方向

1、javaSe,是基础,包含了基本语法

2、javaEE,是java应用于网页实现

3、javaMe,是java应用于客户端的实现

java没有简称,跟net、c++同级别。js倒有个简称:JavaScript。

不过不要搞混了,js是客户端语言,而java是服务端语言。

首先用 ClassforName(完整类名)获得一个Class对象clazz,然后调用Class对象clazz的newInstance()方法得到一个对象。例如:

package kownreflect;

public class ReflectTest

{

    public static void main(String[] args)

    {

        try

        {

            Class<> clazz = ClassforName("kownreflectShow");

            Show show = (Show) clazznewInstance();

            showtest();

        } catch (ClassNotFoundException e)

        {

            eprintStackTrace();

        } catch (InstantiationException e)

        {

            eprintStackTrace();

        } catch (IllegalAccessException e)

        {

            eprintStackTrace();

        }

    }

}

class Show

{

    public void test()

    {

        Systemoutprintln("hello world!");

    }

}

其中"kownreflectShow"是完整类名,就是包名加类的名字。

  之前看过大神的 美团组件化方案 ,其中提到了通过servicelaoder进行解耦的思路,主要是通过配置接口及其实现类的方式坐到接口隔离作用,本文主要是实现此思路并延伸出通过加载自定义properties文件获取参数配置信息

  通过查看ServiceLoader源码可知,ServiceLoader是通过加载META-INF/services/路径下的接口实现类,加载方式是通过读取配置文件并通过反射的方式获取类的实例

1配置文件读取,获取文件流

其中PREFIX = "META-INF/services/";

由此可见加载路径是META-INF文件夹下面的文件

2通过流获取实现类全路径

其中parseLine方法里面是做了类全路径名校验

思路:

  1读取配置文件

  2获取配置的类全名

  3通过反射获取类的实例

  我们的配置文件将写在assets文件夹下

  通过查看apk包结构可以发现assets文件夹位置是与META-INF平级的,由此我们可以将系统的ServiceLoader加载文件路径改为assets路径

1配置文件读取,获取文件流

2通过流获取接口类与实现类的对应集合

  由于接口类与实现类是一对一关系,所以通过Map以键值对的方式存储接口类与实现类,在系统ServiceLoader做简单修改:

3获取实现类

  在上一步已经获取了所有接口类和实现类的集合,在此通过接口类全名来获取实现类全名,并通过反射的方式获取实现类实例:

到此我们自定义ServiceLoader已经初步实现,在实际开发中,我们一般只需要一个实例及单利,在此我们可以用Map将类的实例与接口类名绑定起来即可。

使用

  加载properties配置参数的思路与ServiceLoader基本一致,只是获取配置参数可以通过java类Properties获取

1获取流

  和自定义ServiceLoader获取流一致

2获取Properties实例

3获取value

4使用

1在查看Iterable 接口时无意中发现了default关键字,经查看资料显示为java8新加的,用于在接口中写默认的方法函数体

有兴趣的可以去 >

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,简称EL。struts2默认的标签语言就是OGNL。

它有一下几大优势:

1、支持对象方法调用,形式如:objNamemethodName();

2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 | 值名],例如:

@javalangString@format('foo%s','bar')或@tutorialMyConstant@APP_NAME;

3、支持赋值 *** 作和表达式串联,例如: price=100,discount=08, calculatePrice(),这个表达式会返回80;

4、访问OGNL上下文(OGNL context)和ActionContext(都指的是action上下文); #xxxx,#xxxx xxxx,#xxxxxxxxx xxxx xxxx xxxx

5、 *** 作集合对象。

6、OGNL表达式中能使用的 *** 作符基本跟Java里的 *** 作符一样,除了能使用 +, -, , /, ++, --, ==, !=, = 等 *** 作符之外,还能使用 mod, in, not in等。(引号内)

给你写了个例子你看下哈。。

import javalangreflectField;

public class GetField {

public static void main(String[] args) {

try {

Class clazz = ClassforName("");//根据类名获得其对应的Class对象 写上你想要的类名就是了 注意是全名 如果有包的话要加上 比如javaLangString

Field[] fields = clazzgetDeclaredFields();//根据Class对象获得属性 私有的也可以获得

for(Field f : fields) {

Systemoutprintln(fgetType()getName());//打印每个属性的类型名字

}

} catch(Exception e) {

eprintStackTrace();

}

}

}

以上就是关于Java类的基本组成和使用全部的内容,包括:Java类的基本组成和使用、如下Java中的类信息、java的全称是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9771120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存