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的全称是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)