1. 反射
  • 获取Class
 对象.getClass()
Builty bt=new Builty();
Class clz=bt.getClass();

.class()
clz=Builty.class;

Class.forName("包名.类名") //包全路径名
clz=Class.forName("com.bee.Builty");
  • 创建对象
//JDK<=8
Builty bt=(Builty)clz.newInstance();
//JDK>=9
Builty bt=(Builty)clz.getConstructor().newInstance(); //可以传参
  1. XML
  • 解析方式
    SAX(流解析,顺序解析);DOM(文档解析,树结构解析)
  • SAX解析流程
public class XmlTest {

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//SAX解析
//1、获取解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2、从解析工厂获取解析器
SAXParser parse =factory.newSAXParser();
//3、编写处理器
//4、加载文档 Document 注册处理器
PHandler handler=new PHandler();
//5、解析
parse.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("com/bee/test/test.xml")
,handler);
}
}
class PHandler extends DefaultHandler{
@Override
public void startDocument() throws SAXException {
System.out.println("----解析文档开始----");
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(qName+"-->解析开始");
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String contents = new String(ch,start,length).trim();
if(contents.length()>0) {
System.out.println("内容为->"+contents);
}else {
System.out.println("内容为->"+"空");
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println(qName+"-->解析结束开始");
}
@Override
public void endDocument() throws SAXException {
System.out.println("----解析文档结束----");
}
}
  • 解析并存储
    为了便于阅读,在xml文件中会加入空白字符,使标签呈现出层次。但这些加入的空白字符将被解读为空标签(包括开始标签和结束标签),而且空标签中的值也将被解读为空。这里的空指null。
public class XmlTest {

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//SAX解析
//1、获取解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2、从解析工厂获取解析器
SAXParser parse =factory.newSAXParser();
//3、编写处理器
//4、加载文档 Document 注册处理器
PersonHandler handler=new PersonHandler();
//5、解析
parse.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("com/bee/test/test.xml")
,handler);

//获取数据
List<Person> persons = handler.getPersons();
for(Person p:persons) {
System.out.println(p.getName()+"-->"+p.getAge());
}
}

}

class PersonHandler extends DefaultHandler{
private List<Person> persons ;
private Person person ;
private String tag; //存储当前的标签

@Override
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//qName即为开始标签<tag>中的tag
if(null!=qName) {
tag = qName; //存储当前标签名
if(tag.equals("person")) {
person = new Person();
}
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//<tag>contents</tag>
//取开始标签<tag>和结束标签</tag>之间的内容——contents
String contents = new String(ch,start,length).trim();
if(null!=tag) { //处理了取到的标签tag为空的情况
if(tag.equals("name")) {
person.setName(contents);
}else if(tag.equals("age")) {
if(contents.length()>0) {
person.setAge(Integer.valueOf(contents));
}
}
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//qName即为结束标签</tag>中的tag
if(null!=qName) {
if(qName.equals("person")) {
persons.add(person);
}
}
tag = null; //将当前标签置为空,便于后续重新处理新的标签。
}
@Override
public void endDocument() throws SAXException {
}

public List<Person> getPersons() {
return persons;
}
}