Java遗忘笔记(1)

Wesley13
• 阅读 630

1. 静态代码块

class Parent{ 
static String name = "hello"; 
{ 
System.out.println("parent block"); 
} 
static { 
System.out.println("parent static block"); 
} 
public Parent(){ 
System.out.println("parent constructor"); 
} 
} 

class Child extends Parent{ 
static String childName = "hello"; 
{ 
System.out.println("child block"); 
} 
static { 
System.out.println("child static block"); 
} 
public Child(){ 
System.out.println("child constructor"); 
} 
} 

public class StaticIniBlockOrderTest { 

public static void main(String[] args) { 
new Child();//语句(*) 
} 
}

output:

parent static block
child static block
parent block
parent constructor child block child constructor

注意,就算是子类中的构造方法写的是super(),也要先执行super(),在执行子类的{},之后子类的构造方法。

Java 内省

内省IntroSpector

JavaBean主要用于传递数据信息,其方法用于访问私有变量,且方法名符合某种规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少。这些信息储存在类的私有变量中,通过set()、get()获得。内省主要是对JavaBean进行操作。JavaBean内部的方法要按照某种规则命名,例如void setAge(int age)、int getAge()。JavaBean可以作为普通类进行操作;普通类如果内部有set()、get()方法,也可以当做JavaBean使用。
JavaBean的属性是通过get()和set()方法推断出来的,即去掉get、set后的字母,例如,属性为age,而不是成员变量,因为成员变量看不见。获得属性名的规则:如果属性名的第二个字母是小写,则把第一个字母小写。例如,gettime—>time,setTime—>time,getCPU—>CPU。
JavaBean处理的好处:
1、JavaEE中许多地方需要使用JavaBean。
2、JDK给JavaBean提供的API称为内省。
PropertyDescriptor类

PropertyDescriptor类表示JavaBean类通过存储器导出一个属性。主要方法:
1、getPropertyType(),获得属性的Class对象。
2、getReadMethod(),获得用于读取属性值的方法;getWriteMethod(),获得用于写入属性值的方法。
3、hashCode(),获取对象的哈希值。
4、setReadMethod(Method readMethod),设置用于读取属性值的方法;setWriteMethod(MethodwriteMethod),设置用于写入属性值的方法;
通过属性名获取对应的值,利用反射方法,如下:

ReflectPoint pt1 = new ReflectPoint(7,9);
String propertyName = "x";//给一个属性,获取值
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = pd.getReadMethod();//Read对应get()方法
Object reValue = methodGetX.invoke(pt1);

给某个属性设置值,如下:

String propertyName2 = "y";//给一个属性,设置值
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2,pt1.getClass());
Method methodSetY = pd2.getWriteMethod();//Write对应set()方法
methodSetY.invoke(pt1,3);
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java中静态初始化块的执行顺序
在java中,其应该是先于所有的方法执行。下面是测试代码:1publicclassTest1{2static{3System.out.println("执行静态初始化块test1...");4}5{6System.out.println(
Wesley13 Wesley13
3年前
Java8 Lambda(
一、简述Java8之前创建一个线程的代码:newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("Test");
Stella981 Stella981
3年前
Recursion in Java
RecursioninJava递归无出口publicclassRecursionExample1{publicstaticvoidp(){System.out.println("hello");p();}
Wesley13 Wesley13
3年前
Java中的BigDecimal类和int和Integer总结
前言我们都知道浮点型变量在进行计算的时候会出现丢失精度的问题。如下一段代码:System.out.println(0.050.01);System.out.println(1.00.42);System.out.println(4.015100);System.out.println(1
Wesley13 Wesley13
3年前
Java会出现"unreachable code"错误的几个例子
Java会出现"unreachablecode"错误的几个例子1.throw关键字Java代码:publicvoidXXX()throwsThrowable{thrownewThrowable();System.out.println("test");
Wesley13 Wesley13
3年前
10行代码2道题,全答对的你月薪多少了?
题目1:public static void demo01() {    Integer f1  100, f2  100, f3  200, f4  200;    System.out.println(f1  f2);    System.out.println(f3  f4);}题目2:priva
Easter79 Easter79
3年前
SpringQuartz定时任务调度器
JAVA代码测试类public class TestQuartz {public void test(){System.out.println("Quartz的任务调度");}}Quartz配
Wesley13 Wesley13
3年前
Java字节码入门
字节码入门HelloworldpublicclassHelloworld{publicstaticvoidmain(Stringargs){System.out.println("hello,world");}