指尖上的艺术

学习的热情,不应为季节的变化而改变


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索
close

Linux编辑器vi使用方法详细介绍

发表于 2014-12-08   |   分类于 Code

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

vi的基本概念

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

阅读全文 »

内省Introspector

发表于 2014-10-27   |   分类于 Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package other;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
内省(Introspector)
为什么要学习内省
开发框架时,经常使用java对象的属性来封装程序的数据,每次都是用反射技术完成此类
操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
内省访问JavaBean属性的两种方式
通过propertyDescriptor类操作BeanInfo,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor)
通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后通过反射机制来调用这些方法
*/
public class IntrospectorDemo {

/**
@param args
@throws IntrospectionException
@throws InvocationTargetException
@throws IllegalArgumentException
@throws IllegalAccessException
*/
public static void main(String[] args) throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
test2();
}

//遍历bean的所有属性
public static void test() throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(Person.class, Object.class);//getBeanInfo可传入其他类class文件排除其属性
PropertyDescriptor[] pd = info.getPropertyDescriptors();//属性描述器
for( PropertyDescriptor v : pd) {
System.out.println(v.getName());
}
}

//操纵bean的指定属性
public static void test2() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException {
Person p = new Person();
PropertyDescriptor pd = new PropertyDescriptor(“name”, Person.class);

//设置属性
Method m = pd.getWriteMethod();
m.invoke(p, “赵橙”);

//获取属性
Method mr = pd.getReadMethod();
System.out.print(mr.invoke(p, null));

//获取字段类型
System.out.print(pd.getPropertyType().toString());
}
}

class Person { //javaBean
private String name ;
private String password ;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
阅读全文 »

JAVA反射-笔记

发表于 2014-10-19   |   分类于 Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package other;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
* 反射,加载类并解剖出类的各个组成部分
* getConstrctors() 获取所有public权限的构造函数、方法、字段
* getDeclaredConstrctors() 获取所有声明的构造函数、方法、字段
*
* Method
* Field
* @author Administrator
*/
class ReflectDemo {
/**
* 获取类字节码文件的三种方法
* @throws Exception
*/
private static void getFlectClass() throws Exception {
new Demo(0).getClass();
Demo.class.getName();

Class.forName("other.Demo").getName();//反射技术获取
}

/**
* 创建实例对象
* @throws Exception
*/
public void getInstance() throws Exception {
//使用newInstance()获取类的实例对象,会抛出异常
Class<?> demoClass = Class.forName("other.Demo");
demoClass.newInstance();//等效于使用构造函数传入null

//通过Sting.class指向对应参数的构造函数
Constructor<?> c = demoClass.getConstructor(String.class);
//最后通过构造函数对象创建对应的类对象
Demo d = (Demo) c.newInstance("hello");
}

/**
* 暴力反射
* @throws Exception
*/
public void getConstructForPrivate() throws Exception {
Class<?> d = Class.forName("other.Demo");

Constructor<?> c = d.getDeclaredConstructor(boolean.class);
c.setAccessible(true);//暴力反射,取消访问控制权限检测
Demo demo = (Demo) c.newInstance(true);
}

/**
* 方法
* @throws Exception
*/
public void getMethod() throws Exception {
Class<?> d = Class.forName("other.Demo");
Object obj = d.newInstance();

Method test = d.getMethod("test", null);
test.invoke(obj, null); //运行取得的test方法

// main方法,JDK1.4将传入的数组每个值作为参数,1.5为多参数,直接传入数组的话会出现参数个数异常

Method m = d.getMethod("main", String[].class);
m.invoke(null, new Object[]{new String[]{"aa","bb"}});//解决1.5对1.4的兼容性:方式1
m.invoke(null, (Object)new String[]{"aa", "bb"});//解决1.5.对1.4的兼容性:方式2
}

/**
* 获取字段
* @throws Exception
*/
public void getField() throws Exception {
Class<?> d = Class.forName("other.Demo");

Object obj = d.newInstance();

Field[] field = d.getFields();//获取public权限的字段
for(Field f : field) {
String fieldStr = f.getName();//字段名
String fieldVal = f.get(obj).toString();//取值
String fieldTyp = f.getType().toString();//类型
System.out.println(fieldTyp+ " " + fieldStr +" = "+ fieldVal);
}
}

/**
* 使用反射获取Demo类的构造函数方法;
* @throws Exception
*/
public void getConstructors() throws Exception {
Class<?> d = Class.forName("other.Demo");
Constructor<?>[] constructor = d.getDeclaredConstructors();//获取一个装载所有存在的构造函数的数组(包括私有)
String name = null;
for(Constructor<?> c : constructor) {
name = c.getName();//构造函数名
System.out.print(Modifier.toString(c.getModifiers())+ " " + name +" (");//构造函数的全县修饰符
for(Class<?> p : c.getParameterTypes()) {
System.out.print(" "+p.getName());//遍历参数
}
System.out.println(" )");
}
}
}
阅读全文 »

Java 枚举

发表于 2014-10-18   |   分类于 Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
JDK5.0前的枚举
*/
class Grade {
private Grade() {};
public static final Grade A = new Grade();
public static final Grade B = new Grade();
}

//——————————
package other;
public class EnumDemo {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(Grade.A.getValue());
System.out.println(Grade.B.nameG());
//将字符串转为枚举型(检测该字符串是否是枚举中的值)
try {
Grade g = Grade.valueOf(Grade.class , "B");
}catch(IllegalArgumentException e) {
System.out.println(e.getMessage());
}
//获取所有的枚举常量
Grade[] gArr = Grade.values();
}
}

/**

带抽象类的枚举
*/
enum Grade {
A(“100-90”) {
public String nameG() {
return "优";
}
},
B(“89-80”) {
public String nameG() {
return "良";
}
};
private String value;
private Grade(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
public abstract String nameG();
}

注:文章中可能有很多错误,也有可能出现无法使用的情况,因为此技术博文是我的学习笔记,我只是记载一些看到或者想到东西,所以我不推荐你来按照该博文的内容进行直接使用。谢谢~~

Java 可变参数

发表于 2014-10-18   |   分类于 Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package other;
public class ChangeableArgument {
/**
* @param args
*/
public static void main(String[] args) {
demo(1, 2, 3, 4);
}
public static void demo(int ...num) {
for(int v : num) {
System.out.println(v);
}
}
}

注:文章中可能有很多错误,也有可能出现无法使用的情况,因为此技术博文是我的学习笔记,我只是记载一些看到或者想到东西,所以我不推荐你来按照该博文的内容进行直接使用。谢谢~~

国庆已至

发表于 2014-09-30   |   分类于 心情日记

国庆假日该是一个高兴的日子,今天又是如此的巧合,生日与国庆在同一天(大约19年一个周期),更应该高兴才对的……但此时此刻怎么也高兴不起来。

最近心中忐忑不安,为很多事烦恼。

创业本是很早前的一个梦想,至今依然存在,前段时间突然想到了一个idea,告诉了几位同学,但个人的性格却是一个犹豫不决,在没有想透彻之前不能做出果断的决定,这几天同学一直在为这事忙碌,自己却还在犹豫,一旦告诉他们我不做了得多伤感情。或许就不适合创业吧。

有时你想拥有一段感情时,它不会那么快的到来,但当你准备忘却放下时,它却不期而至来到,让你措手不及……

想想从寒假结束到现在已经大半年没有回家了,曾经为了证明自己已经长大,没有他们的陪伴自己一样能行,于是来到了这块宝地。国庆这么长的假期也见不到他们,做什么都毫无意义……

《独立》

应届毕业生

发表于 2014-09-19   |   分类于 心情日记

到了这个阶段,每个人心里都会暗暗承受着一种压力–就业。

每年中国的应届毕业生都上达数百万人,此时,每个人都在承受就业、父母、感情……压力。从此告别那个无(qian)忧(bu)无(gou)虑(yong),心中只有一件事情(学习)的自己。

等22号的科目四考试结束后,基本上就没有任何干扰找工作的事情了,看似是一种解脱实际却束缚。这几天已经开始在网上投递自己的简历了,收到了不少公司的电话邀请面试,但有好几家都是中介或者培训机构

阅读全文 »

JavaScript开发时的五个小提示

发表于 2014-09-03   |   分类于 Code

真是五个很quick的小提示:

只在元素上使用submit事件

如果要在form中绑定事件处理程序时,应该只在元素上绑定submit事件,而不是给提交按钮绑定click事件。

March:这个方式固然很好,但是,公司开发时使用了Web Flow,一个页面就一个大form,而里面可能有若干个提交按钮,所以不得不把部分事件处理程序绑定在了提交按钮的click事件上。

阅读全文 »

科目二终已告一段落

发表于 2014-09-02   |   分类于 心情日记

这次拿去驾驶证的过程相对重庆老家可谓漫漫长路,从14年3月报名,直至6月才上车,将我安排至了15号上车,在催促之下提前至8号,然后到了快考科目二的时候让我等待下一批,无赖之下的漫长等待ing。转眼到了8月15号,又跟着下一批的5位学员一起学习。
每次在上路练习的时候都不能避免被唐教练的严厉斥骂,但都能虚心接受,怎么也不能成为爸爸口中的马路杀手`(∩_∩)′,反而感谢他,不管出于何意。让我好笑的是有两个女生连汽车该走那边的道路都不知道,不明白中间的双黄线、单黄线等禁止标线的含义,这都是常识拉。听她们讲让学员强行观看的视频也是由朋友代劳播放完毕的,听到这儿我特地对她们无语啦。有一次感受到了中国的良好教育模式。

阅读全文 »

Canvas绘制绚丽的倒计时

发表于 2014-08-30   |   分类于 Code

最近想把一直没好好研究的HTML5和CSS3给搞定了,前天才去图书馆借了有关的书籍。
这个效果是跟着网上的一个教程制作的,还没来得及加入自己的想法,原教程上面本是一个显示倒计时的,为了省事而跳过了。
在里面学到了一个对js数组处理地方法

1
2
3
4
5
6
7
8
9
10
//js中没有删除某个角标元素后,后面的元素不能向前移动,可这样处理。

var newL = 0;
for (var i = 0; i < balls.length; i++) {
if (条件成立)
balls[newL++] = balls[i];
}
while(balls.length > newL) {
balls.pop();
}
阅读全文 »
1…5678
George

George

George's blog

74 日志
3 分类
33 标签
RSS
GitHub 微博
© 2018 George
由 Hexo 强力驱动
主题 - NexT.Pisces