Fork me on GitHub
下雪不下雨的个人博客

to be a learner


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Commonweal 404

排序算法

Posted on 2019-04-01 | In 学习笔记
Words count in article: 1.3k | Reading time ≈ 5

排序算法是最常用的一种算法,在面试中也会经常被问到,今天以升序为例总结一下集中常用的排序算法,以及复杂度和稳定性。

关于稳定性:稳定性指的是一组数据中如果存在相等的数据,Ai=Aj,排序前Ai在Aj的前面,那么排序后Ai仍然在Aj的前面,那么这种排序算法就是稳定的,反正则是不稳定的。

常见的排序算法有:

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 快速排序
  • 堆排序
  • 希尔排序

    Read more »

python多线程多进程相关问题

Posted on 2019-03-29 | In 学习笔记
Words count in article: 4.2k | Reading time ≈ 14

在线考试 本次考试成绩:55 答题剩余时间0小时43分9秒
考生须知
1.本次周考结束后,剩余补考次数:2次
2.周考时间为60分钟,超时系统自动交卷
3.本次考试满分100分(5*20道),60分通过考试
1.
(单选题)三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每一个进程最多需要两个该类资源,则该系统( )。
A.有些进程可能永远得不到该类资源
B.必然有死锁
C.进程请求该类资源立刻能得到
D.无

Read more »

堆

Posted on 2019-03-28 | In 学习笔记
Words count in article: 505 | Reading time ≈ 2

定义与基本操作

定义

  • 堆是一棵完全二叉树,每个节点的值都不大于(小顶堆)或者不小于(大顶堆)其左右节点的值
  • 堆一般用于优先队列的实现
    Read more »

Untitled

Posted on 2019-03-05
Words count in article: 0 | Reading time ≈ 1

反射机制

Posted on 2019-02-28 | In 学习笔记
Words count in article: 1.5k | Reading time ≈ 6

什么是反射

在正常的类的使用中,一般是先确定类,然后使用new关键字产生实例化对象然后使用。如果想通过对象取得类的信息,那么可以使用Object类中的getClass()方法。
反射机制的初步操作如下:

1
2
3
4
5
6
7
8
package Test1;
import java.util.Date;
public class testDemo18 {
public static void main(String args[]) {
Date data=new Date();
System.out.println(data.getClass());
}
}

运行结果:

1
class java.util.Date

Class类对象实例化的三种方式

  • getClass() 使用此类必须要有实例化对象
  • 类.class 不需要实例化对象
  • 调用Class类提供的方法:public static Class<?> forName(String className) throws ClassNotFoundException

反射实例化对象

实例化Class对象后,就可以利用Class类来进行类的反射控制,Class类的常用方法如下:

  • public static Class<?> forName(String className) throws ClassNotFoundException 通过字符串设置类名称实例化Class对象
  • public Class<?>[] getInterface() 取得类实现的所有接口
  • public String getName() 取得反射操作类全名
  • public String getSimpleName() 取得反射操作类名,不包括包名
  • public Package getPackage() 取得反射操作类所在的包
  • public Class<? super T> getSuperclass() 取得反射操作类的父亲
  • public boolean isEnum() 反射操作类是否是枚举
  • public boolean isInterface() 反射操作类是否是接口
  • public boolean isArray() 反射操作类是否是数组
  • public T newInstance() throws 反射实例化对象

通过newStance()方法,可以实例化Class类包装的类型,不使用关键字new也可以进行对象的实例化操作。
注:使用newStance()方法进行实例化,类中一定要有无参构造方法,否则会出错

利用反射实例化对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Test1;

class Book{
public Book() {
System.out.println("这是无参构造");
}
@Override
public String toString() {
return "hello";
}
}
public class testDemo19 {
public static void main(String args[]) throws Exception{
Class<?> cls=Class.forName("Test1.Book");
@SuppressWarnings("deprecation")
Object obj=cls.newInstance();
Book book=(Book) obj;
System.out.println(book);
}
}

本程序通过实例化Class类,然后利用newStance()方法进行类包装的对象的实例化,实例化的对象是Object类,需要向下转型强制变为子类。

反射调用构造

使用newStance()方法实例化对象,必须要求类里面存在无参构造方法,如果类中没有无参构造方法的话,就必须通过java.lang.reflect.Constructor类来实现对象的反射实例化操作。
java.lang.Class取得构造方法的操作如下:

  • public Constructor<?>[] getConstructors() throws SecurityException 取得全部的构造方法
  • public Constructor getConstructor(Class<?> parameterTypes) throws 取得指定类型的构造方法

Java.lang.reflect.Constructor类常用的操作方法如下:

  • public Class<?>[] getExceptionTypes() 取得构造方法上所有抛出异常的类型
  • public int getNodifiers() 取得构造方法上的修饰符
  • public String getName() 取得构造方法的名字
  • public getParameterCount() 取得构造方法中的参数的个数
  • public Class<?>[]getParameterTypes() 取得构造方法中的参数类型
  • public T newInstance(Object…initargs) 调用指定参数的构造实例化对象

明确调用勒种有参构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package Test2;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
class Book{
private String title;
private int price;
public Book(String title,int price) {
this.title=title;
this.price=price;
}
@Override
public String toString() {
return "名字:"+this.title+",价格:"+this.price;
}

}
public class testDemo1 {
public static void main(String args[]) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class<?> cls=Class.forName("Test2.Book");
Constructor<?> con=cls.getConstructor(String.class,int.class);
Object obj=con.newInstance("中国上下五千年",199);
System.out.println(obj);
}
}

反射调用方法

常用“对象.方法()”调用方法,利用反射机制也可以实现类方法的操作
Class类取得方法的操作:

  • public Methode[] getMethod() throws SecurityException 取得类中全部的方法
  • public Method getMethod(String name,Class<?> parameterTypes) throws 取得类中指定名称与参数类型的方法

Method常用方法如下:

  • public int getModifiers() 取得方法的修饰符
  • public Class<?> getReturnType() 取得方法的返回值类型
  • public int getParameterCount() 取得方法中定义的参数数量
  • public Class<?>[] getParameterTypes() 取得方法定义中参数类型
  • public Object invoke(Object obj,Object…args) throws Exception 反射调用方法并执行方法中所需要的参数
  • public Class<?>[] getExceptionTypes() 取得方法抛出的异常类型

使用反射类操作java类属性

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
package Test2;
import java.lang.reflect.Method;
class Book2{
private String title;
public void setTitle(String title) {
this.title=title;
}
public String getTitle() {
return title;
}
}
public class testDemo2 {
@SuppressWarnings("deprecation")
public static void main(String args[]) throws Exception{
String fieldName="title";
Class<?> cls=Class.forName("Test2.Book2");
Object obj=cls.newInstance();
Method setMet=cls.getMethod("set"+initcap(fieldName), String.class);
Method getMet=cls.getMethod("get"+initcap(fieldName));
setMet.invoke(obj, "Java开发");
System.out.println(getMet.invoke(obj));
}
public static String initcap(String str) {
return str.substring(0,1).toUpperCase()+str.substring(1);
}
}

反射调用成员

除了构造方法,普通方法,反射类也可以进行成员的操作,Class类中成员的取得方法如下:

  • public Field[] getDeclaredFields() throws SecurityException 取得本类定义的全部成员
  • public Field getDeclaredFields(String name) throws… 取得本类指定名称成员
  • public Field[] getFields() throws SecurityException 取得本类继承父类的全部成员
  • public Field getFields(String name) throws… 取得本类继承父类中指定的成员

Field类常用描述成员信息的方法如下:

  • public Class<?> getType() 取得该成员的类型
  • public Object get(Object obj) throws… 取得指定对象中的成员内容
  • public void set(Object obj,Object value) throws… 设置指定对象中成员内容,相当于直接利用对象调用成员设置内容

利用反射类操作私有成员:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Test2;
import java.lang.reflect.Field;
class Book3{
private String title;
}
public class testDem03 {
public static void main(String args[]) throws Exception{
Class<?> cls=Class.forName("Test2.Book3");
@SuppressWarnings("deprecation")
Object obj=cls.newInstance();
Field titField=cls.getDeclaredField("title");
titField.setAccessible(true);
titField.set(obj, "Java开发");
System.out.println(titField.get(obj));

}
}

Java类集框架

Posted on 2019-02-26 | In 学习笔记
Words count in article: 2.2k | Reading time ≈ 10

单对象保存父接口:Collection

定义

1
public interface Collection<E> extends Iterator<E>

核心方法

  • public boolean add(E e) 普通方法 向集合里面保存数据
  • public boolean addAll(Collection<? extends E> c) 普通方法 追加一个集合
  • public void clear() 普通方法 清空集合,跟元素为null
  • public boolean contains(Object o) 普通方法 判断是否含有指定内容,需要equals支持
  • public boolean isEmpty() 普通方法 判断是否是空集合
  • public boolean remove(Object o) 普通方法 删除对象,需要equals支持
  • public int size() 普通方法 取得集合中保存元素的个数
  • public Object[] toArray() 普通方法 将集合变为对象数组
  • public Inerator iterator() 普通方法 为Iterator接口实例化
Read more »

线程与进程

Posted on 2019-02-26 | In 学习笔记
Words count in article: 984 | Reading time ≈ 3

进程:程序的一次动态执行的过程,从代码加载到执行完毕的一整个过程。
线程:线程是比进程更小的一个单位,线程是在进程的基础上进一步进行划分,一个进程可以分为多个线程,这些线程同时存在同时运行。
多进程:多进程的操作系统可以同时运行多个程序,由于CPU具备分时机制,每个进程都可以循环获得自己的CPU时间,使进程看起来像同时进行一样。

Read more »

IO编程

Posted on 2019-02-25 | In 学习笔记
Words count in article: 1.1k | Reading time ≈ 4

所有的IO操作都在java.io包中进行定义,一共包含5个类和一个接口:

  • 五个类:File、InputStream、OutputStream、Reader、Writer
  • 一个接口:Serializable
Read more »

正则表达式

Posted on 2019-02-08 | In 学习笔记
Words count in article: 494 | Reading time ≈ 1

所有的正则表达式的类都定义在java.util.regex包里面。此包中主要定义了两个主要的类:

  • Pattern类:主要定义要使用的表达式对象
  • Macher类:用于进行正则标记与指定内容的匹配操作
Read more »

内建函数式接口

Posted on 2019-02-02 | In 学习笔记
Words count in article: 218 | Reading time ≈ 1

从JDK 1.8开始提供了一个新的开发包:java.util.function,并在这个包中提供了4个核心的函数式接口

Read more »

123…5
xxyxt

xxyxt

点滴记录 | step by step

43 posts
6 categories
16 tags
RSS
GitHub E-Mail CSDN
© 2019 xxyxt
| Powered by Hexo Theme - NexT.Gemini
Visitor Total Visit