`
ynztpwl
  • 浏览: 61934 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

参加SCJP认证时学习的笔记 .

 
阅读更多

把SCJP认证的参考书看了2遍,但迟迟未考,因为没有钱。。。今年终于狠下心花了700元在网上买了张转让的考试券(原价1400,SUN其实挺黑的),5月份报名考了90多分,也算了却了一桩心事。下面是我当时的学习笔记,都是一些很基础的知识。

一.语言基础
1.JAVA语言标识符:开头以字母,"_","$"开头,后跟字母,"_","$",数字。
2.System.gc() 或者Runtime.getRuntime().gc() 通知JVM调用垃圾回收器来回收已废弃的对象。
3.import-->导入包中的类;import static-->导入包中类的静态变量和方法。
4.类中的成员变量可自动初始化,局部变量使用前必须指定初始值。
5.数组长度在用new语句创建时长度已指定,且一旦指定长度不可再改变,1)如一开始用常量来初始化数组长度,如后面要改变数组长度则编译错误。2)如开始用变量来初始化数组长度,如后面改变数组长度则不会发生编译错误,但是数组长度不变;用new新建数组时,必须指定数组大小。
6.顶层类不能用private / protected 修饰。
7.可变参数必须是参数列表中的最后一个参数,且一个方法中只能有一个可变参数。
8.给一个变量赋值null,则该变量则符合回收的条件,失去存在的意义。
9.当作用域不同的两个变量名称相同时,作用域小的变量覆盖作用域大的变量值。
10.println() 方法输出的结果是一个十进制数。
11.当程序员指定初始化数组时,datatype arrayname ={data1,data2,data3....}必须提供所有元素的初始化值。
12.指定数组长度的数值类型只能是byte,short,int不能是long。
13.方法体内的局部变量不能用static修饰。
14.i=0; i=i++; 结果i=0 。


二.JAVA运算符
1.当两个操作数的数据类型为char,byte,short和int时,运算结果的数据类型都为int。
2./ 当除运算的右操作数取值为0时,如果操作数均为整数,则会抛出ArithmeticException异常,如果至少有一个为浮点数,则结果为一个Infinity值。
3.% 当取模运算中有负数为操作数时,运算的结果取决于左操作数,即和左操作数的符号一致。
4.当取模运算的右操作数为0时,如果操作数为一整数,则会抛出算数异常ArithmeticException,如至少有一个是浮点数,则结果为一个NaN值。
5.移位运算的操作数只能是整型,即char,byte,short,int,long,进行移位运算时,总是现将其他类型转换为int和long型。
6. <<左移位运算:左移时,最高位被舍弃,最低位补0 ----等同于×2运算。
>>右移位运算:右移时,最高位若为正,则插0,若最高位为负,则插1----等同于/2运算
>>>无符号移位运算:移入位始终补0
7.instanceof 比较运算符,左操作数是一个对象引用表达式,通常为一个引用变量或数组元素,可以取值null,则比较结果仅返回false,不会抛出任何异常。右操作数必须是一个类、接口或数组,但不能是java.lang.Class或一个代表类名称的字符串对象。当右操作数是一个接口时,表明比较的目的是判断左操作数是否实现了此接口。instanceof运算符不能用于测试一个对象和一个无类型定义数组的比较,因此必须明确指定数组的类型。
8.位操作运算的操作数只能是整型,即char,byte,short,int,long,进行移位运算时,总是现将其他类型转换为int和long型。按位非运算不能用于布尔型数值,且不能将布尔型数值和其他数值混合使用。
9.按位取反运算(~)采用取负减1法: ~i =(-i) -1
10.逻辑与(&&)、逻辑或(||)不同于按位与(&)、按位或(|)运算,会存在逻辑短路。
11.条件运算符<布尔表达式>?表达式0:表达式1 ,表达式0、1的类型必须和共同的目标变量类型兼容。
12.赋值运算符(=)的左操作数的类型取值范围必须大于等于右操作数的类型取值范围。
13. ==和equals()的区别: == 引用类型比较引用,基本类型比较值;equals()方法只能比较引用类型,对类File,String,Data及封装类来说是比较类型及其内容。
14.用==进行比较时,两边的数据类型必须一致,可互相转换的数据类型除外。
15.计算顺序从左至右,赋值顺序从右至左,先计算后赋值。
16.不能将NaN当做一个普通数应用于运算中,如z==Double.NaN 返回false。
17.+用来连接字符串时,要求两个操作数都必须是字符串。引用类型数据和基本类型数据是不能一起混合运算。
18.JAVA运算符列表:
单操作数运算符: ++, -- , + , - , ! , ~ , ()
算术运算符:+ ,- ,* , / ,%
移位运算符:<< ,>> ,>>>
比较运算符:< ,<= ,> , >= ,!= , == , instanceof
位操作运算符:& , | , ^ , ~
逻辑运算符: && , || , !


三.JAVA修饰符
1.抽象类可以存在抽象方法,但也可以不包含抽象方法。
2.抽象类表明未完全实现的概念,所以不能被实例化,也不能被final和private修饰。
3.final基本类型变量必须初始化,系统不会赋默认值,否则编译错误。final引用类型变量引用初始化对象后,无法再引用其他对象。final方法无法被重载但是可以被过载,final类无法被继承。
4.final是唯一可用于方法内局部变量的修饰符。
5.native只能修饰方法而不能修饰类和变量,native方法如同一个抽象方法,没有实际的方法体,而且可以被private修饰。
6.静态类的属性被所有类实例所共享,即任何一个类实例改变了静态属性的值,所有类实例拥有的这个静态类属性值都会同步得到改变。
7.一个静态方法不能被重载为一个非静态方法,但是可以被过载为一个非静态方法。
8.静态代码块主要用于初始化,仅被执行一次,即首次装载类时被执行,非静态代码块在每当创建类实例时执行,其运行在父类构造器之后,所在构造器之前,多个非静态代码块顺序取决于在类中定义的次序。
9.synchronized只能用来修饰方法,不能用来修饰构造器。
10.transient只能用来修饰类成员变量,不能修饰局部变量,transient变量不能被序列化。一个静态变量不管是否被transient修饰都无法被序列化,一个private变量一经序列化处理后,就可以通过读取一个文件,或者拦截网络传输来得到它。
11.同一个类的两个实例可以互相访问内部private属性成员。
12.执行顺序:初始代码块 -- 构造器 --方法体语句。


四.类型转换及造型
1.引用类型的转换:1)类可以转换成类(该类的超类),接口(该类实现的接口),不能转换成数组。
2)接口可以转换成类(Object类),接口(该接口的超接口),不能转换成数组。
3)数组可以转换成类(Object类),接口(Cloneable接口和Serializable接口),数组(能转换成目标数组元素类型)。
2.引用类型的造型:1)非final类可造型为非final类(存在继承关系,不要求顺序),final类(非final类的超类),接口(总是ok),数组(类型为Object)
2)final类可造型为非final类(final类的超类),final类(和被转换final类是同一个类),接口(该final类实现的接口)
3)接口可造型为非final类(总是ok),final类(final类实现了该接口或Serializable接口)
4)数组可造型为非final类(Object类),数组(可造型的的元素类型)
3.超类实例不能造型为子类实例,可以通过编译,但运行期会抛出ClassCastException。

五.程序流控制
1.swith 结构中的选择因子的数据类型只能是 char,byte,short,int或enum。
2.只有执行System.exit()方法或出现error错误时,finally语句块才不会获得执行而退出程序。
3.在一个方法中如果用throw语句抛出一个异常,则必须在方法声明中采用throws语句声明方法体中抛出的异常,并且声明的异常必须是方法体中抛出的异常或其超类。
4.重载方法抛出的异常只能是被重载方法抛出异常的子类或者与其一样或者不抛出任何异常。
5.当同时初始化多个控制循环次数的变量为同一数据类型时,一起声明,形式为datatype vary 1=value1, vary 2 =value2.
6.标签必须配合循环体和循环语句使用。
7.catch语句中捕获的异常必须为方法抛出异常的超类或其自身。


六.面向对象
1.this引用的是当前创造的类实例对象的句柄;super引用的是当前创建类实例对象的父类的句柄。
2.接口默认是public,abstract,接口的成员属性变量默认为public,static,final类型,接口的成员方法默认为public,abstract,非final类型。
3.构造器必须与类型相同,无返回值,且只能有public,private,protected修饰。
4.子类可以继承父类的所有属性和方法,但是构造器除外,它不能被继承。
5.在同一个类中的不同构造器中调用其他构造器需要使用this(...)的形式,而且必须是在构造器的第一行调用。
6.在子类中直接调用父类的构造器,必须使用super(...)语句,而且必须放在其构造器中的第一行。super()语句只能在构造器中被调用。
7.不能在构造器中同时使用this和super。
8.构造器可以抛出异常,并且如果父类默认构造器抛出一个异常,子类的默认构造器应该处理由父类抛出的异常。
9.在执行子类构造器时,如果没有明确指明调用父类的某个构造器,则系统自动调用父类无参的构造器。
10.接口没有构造器,抽象类的构造器在其实现类实例化时被调用。
11.枚举类直接继承于Object类,枚举声明的位置有两个地方:类外部和类内部,但不是在方法体中定义枚举集。在类内部定义的枚举,需要通过所在的类名来引用(在方法体内的引用除外)。在类外部定义枚举时,只能被public 修饰或不被修饰。
12.枚举中的构造器不能由程序员来调用完成枚举的实例化,它是由系统通过枚举值后面定义的参数来自动调用枚举的构造器。
13.自定义枚举可以重载其父类Enum中定义的toString()方法打印输出指定值,如果未重载toString()方法打印输出的是枚举常量。
14.JavaBean组建是具有属性的Java,其属性一般为private属性。JavaBean组建中更改属性值的方法称为setter方法,获取属性值的方法称为getter方法,两种都为public。如果属性成员不是布尔类型,则getter方法的必须是getXXX()方法,XXX为大写的属性名,如果属性是布尔类型,则getter方法必须为getXXX或者isXXX。
15.重载---父类中的一个方法在子类中获得重新定义,但是方法名、参数列表必须相同,返回值可以不同,但是被重载方法的返回类型必须为重载方法返回类型的父类。重载方法不能比原来被重载的方法访问范围窄。重载方法抛出的异常只能是被重载方法抛出异常的子类或相同或不抛出异常。静态方法只能重载为一个静态方法,非静态方法只能重载为一个非静态方法。父类中被子类重载的方法每个最多只能被重载一次,子类中的重载方法可以通过super.xxx()来访问父类中被重载的方法,但是只能访问其直接父类,不能越级访问。
过载---多个方法拥有一个名字,但是每个方法的参数列表必须不同,即参数的个数不同或参数的排列顺序不同或参数的类型不同。一个静态方法可以被过载为一个静态方法,也可被过载为一个非静态方法。
重载与过载的区别:1)过载方法彼此之间相互独立,实质上是不同的方法;重载方法和被重载方法之间是取代的关系。
2)过载方法存在于一个类中,数量没有限制;重载方法和被重载方法分别存在于子类和父类中,其子类中最多有一个重载方法。
3)过载方法必须要用不同的参数列表;重载方法和被重载方法的参数列表必须相同。
4)过载方法之间的返回类型可以随意选取;重载方法和被重载方法必须要有相同的返回类型(或为子类)
5)过载方法之间对修饰符和抛出的异常无限制;重载方法的不能比被重载的方法访问范围窄,抛出的异常也只能为被重载方法抛出异常的子类或相同或无异常
16.定义在方法体外的非静态内部类引用形式:new out_class().new in_class(),如其他类成员一样附属于类实例。定义在方法体外的静态内部类附属于外部类,而不是外部类实例,引用形式:new out_class().in_class()。在方法体中定义的内部类如同方法成员一样附属于方法体,只能在方法体中用new直接创建实例,并且只能在方法体中被访问。
17.类生成的.class文件名称形式:先是封装类的名字,再跟随一个$,再跟随一个内部类的名字,如果是匿名内部类,则$后面跟随数字。
18.静态内部类只能访问静态变量,非静态内部类其内部属性不能声明为静态的。
19.一个定义在方法体中的内部类不能加任何访问修饰符,且只能访问方法中定义的被声明为final的局部变量。
20.匿名内部类的定义形式:new XXXX(){ /*class body */ },匿名内部类可以继承其他类或实现接口,但是不能同时继承其他类又实现接口。匿名内部类不能有任何明确的构造器。匿名内部类默认为final的,且不能被abstract和static修饰。
21.父类如没有无参默认构造器,而子类的构造器中又没有指定调用哪个父类的构造器时,系统会自动寻找父类的无参构造器,从而发生编译错误。
22.封装类的自动装箱和拆箱不能改变原有数据类型范围。
23.类的初始化顺序:static对象-->非static 对象,同类型按先后顺序。


七.线程
1.声明一个线程的两种方式:1)实现runnable接口,并实现其上定义的唯一一个方法run()方法。2)扩展Thread类并重载其定义的run()方法。
2.Thread类本身已实现了Runnable接口,因此可以把一个Thread类的实例传递进另一个Thread类的构造器中。
3.通过调用Thread类实例(而不是Runnable实例)上的start()方法来启动线程,执行run()方法。但调用start()方法只是启动线程,并不意味着线程可以立刻得到执行,这取决于线程获取资源的情况和CPU的占有情况。
4.只能在Thread对象上调用一次start()方法,如果在同一个Thread对象上多次调用start()方法,则会导致RuntimeException异常抛出。
5.线程在生命周期中的5种状态:
1)新建状态 当一个线程类实例被创建时,线程处于新建状态。此时的线程已初始化分配了资源,但还没有在该线程调用start()方法,此时线程是一个活的线程,但是还不是一个执行 线程。
2)就绪状态 当start()方法获得调用,线程首先进入就绪状态。此时线程已具备可运行条件,进入线程队列,排队等待CPU,一旦获得CPU使用权,就可进入运行状态。
3)运行状态 当就绪状态的线程被调度获得CPU资源时,便进入运行状态,定义在线程体中的run()方法被调用,从方法体的第一条语句开始执行。
4)堵塞状态 处于运行状态的线程因事件的发生,而导致让出CPU的使用权,并终止当前执行,进入堵塞状态。处于阻塞状态的线程,只有当引起阻塞的原因被消除后,先必须转入就绪 状态,才可在获取CPU使用权从原来的中止处开始继续执行。
5)死亡状态 线程死亡的原因有两个a.一个正常运行的线程执行完全部工作,即执行完了run()方法,并正常退出。b)一个线程被提前强制终止,例如调用destroy()方法终止线程。处 于死亡状态的线程不能被重新启动,即不具有重新运行的能力。如果用start()方法启动一个处于死亡状态的线程,则会抛出IllegalThreadStateException。
6.Thread类上定义了一些控制线程状态的方法,分别为:
* void start() 使该线程开始执行;Java虚拟机调用该线程的run()方法。
*void stop() 用于强制当前线程停止执行。
* static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
* static void sleep(long millis) throws InterruptedException 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。
* final void join() throws InterruptedException 等待该线程终止。
* final void join(long millis) throws InterruptedException 等待该线程终止的时间最长为millis毫秒,超时为0意味着要一直等下去。
* final void join(long millis, int nanos) throws InterruptedException 等待该线程终止的时间最长为millis毫秒+nanos纳秒,参数nanos取值范围为0~999999,单位十亿分之一秒。
7.sleep()是一个静态方法,它使当前执行的线程休眠,不释放任何锁。sleep()方法仅可以保证休眠的线程至少休眠在sleep()方法的参数中指定的时间,但不能保证刚醒来的线程何时实 际返回到运行状态,这是因为线程在休眠结束时,只能重新进入就绪状态。一个线程不能让另一个线程休眠。
8.每个线程都有优先级,优先级是一个取值范围1~10的整数,具有优先级高的线程优先执行。在Thread类上定义了3个静态整型常量MAX_PRIORITY / MIN_PRIORITY / NORM_PRIORITY代表最大优先级/最小优先级/默认优先级,3个常量分别对应的整型值为10 , 1 ,5 。
9.使用Thread对象上的setPriority()方法可以为线程设置优先级,但是优先级是没有保证的。如果没有明确地设置线程的优先级,那么线程优先级与创建该线程的线程具有同等优先级
10.yield()方法的目的是让具有相同优先级线程之间能够适当地轮转,以允许具有相同优先级的其他线程获得运行的机会,但不保证一定发生,线程可能让步,但也可能又立即重新进入 运行状态。最可能保证的是在任何指定的时间,当一个线程在运行时,其优先级通常不会比处于可运行状态的线程的优先级低。
11.当一个线程调用另一个线程的join()方法时,当前运行的线程将进入等待状态,直到它加入的线程完成为止。
12.Object类上定义了wait()方法用于阻塞线程。
* final void wait() throws InterruptedException 导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法。
* final void wait(long timeout) throws InterruptedException 导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法或超过指定的时间量。
* final void wait(long timeout, int nanos) throws InterruptedException 导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll()方法或其他某个线程等待,或已超过 某个实际时间量。
13.通过调用setDaemon(boolean)方法,可以将一个线程设置为后台线程,该方法应在线程启动前调用,否则会抛出IllegalTreadStateException异常来。
14.synchronized关键字用于修饰同步化代码,为避免两个线程同时试图访问某一数据而造成数据损毁。每个对象都包含一个锁,当调用任何被声明为同步的方法时,对象就会被锁定, 不可再调用该对象上的其他同步方法,除非第一个方法完成结束,并解除了锁定。
15.synchronized只能用于修饰方法和代码块,不能用于修饰类和变量。它有两种形式,一种是修饰方法,形式为synchronized return_type method_name(){} ;一种是修饰代码块,形式 为synchronized(object_name){}。synchronized方法不能修饰构造器。
16.只有一个线程可以访问某个实例的同步代码,但是多个线程可以访问同一个对象的非同步代码。
17.wait() , notify(),notifyAll()方法都是定义在Object类中的,用于实现线程间的交互。3个方法必须从同步环境中调用,但Thread类本身并没有这3个方法的定义。调用wait()和 notify()方法时,该线程当前必须具有这个对象的锁。当在对象上调用wait()方法时,执行该代码的线程立即释放它在对象上的锁。然而在调用notify()方法时,并不意味着这时线程 会放弃其锁。如果线程仍然在完成同步代码,则线程在移出同步代码前不会释放其锁。因此调用notify()方法不意味着这时该锁将变得可用。
18.notify()方法用于向在相同对象等待池内,正处于等待状态的一个并且是唯一一个线程发送信号。notifyAll()方法的工作方式与notify()方法相同,只不过它是把信号发送给在该对象 上等待的所有线程。notifyAll()方法不能指定通知哪个等待的线程。
19.当被锁定的对象试图访问另一个被锁定的对象,而该对象又要访问第一个被锁定的对象时,便发生死锁现象。即两个线程彼此间都在等待对方线程释放其锁,而这些锁永远也不会 获得释放。
20.非静态同步方法访问静态属性是线程不安全的,只有静态同步方法访问才是线程安全的。同一个类中的同步静态方法不会被两个线程同时访问。
21.interrupt()方法中断线程,interrupted()判断线程是否中断

八.输入/输出
1.File类是文件和目录路径名的抽象表示形式.File类不用于实际的读写文件数据,其主要用于较高层次的操作文件,例如建立新文件、查找文件、删除文件、建立目录等。File类实例只是文件的代表,并不是文件本身,因此File类实例代表的文件,如果在文件系统中不存在,File类也不会在文件系统中自动创建该文件.File类的实例是不可变的,也就是说一旦创建File对象表示的抽象路径名将永不改变。
构造函数 File(String pathname) File(String parent,String child)
常用方法 *boolean crateNewFile() 当且仅当不存在具有此抽象路径名所指定的名称的文件时,原子的创建由此抽象路径名指定的一个新的空文件。
*boolean delete() 删除此对象路径名表示的文件或目录,如果此路径名表示一个目录,则此目录必须为空才能删除。
*boolean exists() 测试此抽象路径名表示的文件或目录是否存在。
*boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录。
*boolean isFile() 测试此对象抽象路径名表示的文件是否是一个标准文件。
*boolean mkdir() 创建此抽象路径名指定的目录。
*boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
*String getAbsolutePath() 获取文件类对象的绝对路径。
2.FileReader类用来读取字符文件,属于低级I/O类,只能读取单个字符或固定数量的字符数据。
构造函数 FileReader(File file) 在给定File中读取数据,并创建一个新的FileReader
FileReader(String fileName) 在给定文件名的情况下,从中读取数据并创建一个新的FileReader。
常用方法 *int read() 读取单个字符
*int read(char[] cbuf, int offset, int length) 将字符流读入数组中的某一部分。
3.BufferedReader类用于从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效率读取。
构造函数 BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in , int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
常用方法 *int read() 读取单个字符
*int read(char [] cbuf, int off, int len) 将字符读入数组的某一部分
*String readLine() 读取一个文本行
*void close() 关闭该流
4.FileWriter类用来写入字符文件,属于低级I/O类,只能写入单个字符或固定数量的字符数据。
构造函数 FileWriter(File file) 在给出File对象的情况下,构造一个FileWriter对象。
FileWriter(String fileName) 在给定文件名的情况下,构造一个FileWriter对象。
常用方法 *void write() 写入单个字符
*void write(char[] cbuf, int offset, int length) 写入数组中的某一部分。
5.BufferedWriter类用于将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
构造函数 BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out , int sz) 创建一个使用指定大小输出缓冲区的缓冲字符输出流。
常用方法 *void write() 写入单个字符
*void write(char[] cbuf, int offset, int length) 写入数组中的某一部分。
*void newLine() 写入一个行分隔符
*void flush() 刷新该流的缓冲
*void close() 关闭该流
6.PrintWriter类用于向文本输出流打印对象的格式化表示形式,此类实现在PrintStream中的所有print方法。
构造函数 PrintWriter(File file) 使用指定文件穿件不具有自动行刷新的新PrintWriter
PrintWriter(Writer out) 使用不带自动行刷新的新PrintWriter
常用方法 PrintWriter append(char) 将指定字符追加到此writer
PrintWriter format(String format,Object...args) 使用指定格式字符串和参数将一个格式化字符串写入此writer中
PrintWriter printf(String format,Object...args) 使用指定格式字符串和参数将一个格式化字符串写入此writer中的便捷方法
7.序列化分为两大部分序列化和反序列化,序列化是将对象数据分解成字节流,以便存储在文件中或在网络上传输,反序列化就是打开字节流并重构对象。对象序列化不仅保留了一个对象的数据,而且递归保留对象引用的每个对象的数据。
8.实现java.io.Serializable接口的类对象就可以启动其序列化功能转换成字节流或从字节流恢复。可序列化类的所有子类都是可序列化的,但不是每个类都可以序列化,如涉及线程类
9.一个类只要其自身实现了Serializable接口,而其父类没有实现Serializable接口,其依然可以进行序列化操作。不过在其进行反序列化时,系统会首先调用父类构造器先实例化父类,因为无法获取序列化的父类对象。
10.java.io包有两个序列化对象的类,ObjectOutputStream负责将对象写入字节流,ObjectInputStream负责从字节流重构对象。ObjectOutputStream类扩展DataOutput接口,其中writerObject()方法用于递归序列化对象及其引用的其他对象。ObjectInputStream类扩展DataInput接口,其中readObject()方法用于反序列化对象。每次调用readObject()方法都返回流中下一个Object。对象字节流并不传输类的字节码,而是包括类名及其签名。readObject()收到对象时,JVM装入头中指定的类,如果找不到这个类,则readObject()方法抛出ClassNotFoundException异常。
11.序列化时,类的所有数据成员均可序列化除了声明为transient或static的成员。将变量声明为transient后,序列化过程就无法将其加进对象字节流中,没有从transient数据成员发送的数据,在数据反序列化时,无法重建该数据成员,因为这个数据成员不向流中写入任何数据。为了定制序列化,需要提供writeObject()方法和readObject()方法来处理这些数据成员。使用writeObject()与readObject()时,必须按写入的顺序读取这些数据成员。
12.transient修饰符只能用于修饰变量,不能用于修饰类和方法。本地变量不能被transient修饰。
13.一旦变量被transient修饰,该变量不再是对象持久状态的一部分,该变量内容在序列化后无法获得访问。
14.transient修饰符的作用是保证变量的安全性,因为即使是私有变量,一经序列化处理,就可以通过读取一个文件,或者拦截网络传输得到它。
15.File f = new File("hello.test") 只完成创建一个代表文件"hello.test"的实例,而没有实际创建一个hello.test文件。 new FileOutputStream(f) 执行过程先判断指定的hello.test文件是否存在,如果存在,就打开该文件,如果不存在,就创建一个新文件并打开。如果无法创建新文件,则FileNotFoundException异常被抛出,打开文件后可对其进行读写操作。而new FileReader(f)在执行过程中则会抛出异常FileNotFoundException。
16.*FileReader类用于读取字符流,其上只提供读取字符的方法没有提供读取其他数据类型的方法。
*PipedInputStream类用于连接到传送输出流,因此其构造器PipedInputStream(PipedOutputStream src)不能接收File对象,并且其只提供读取字节的方法,没有提供读取其他数据 类型的方法。
*DataInputStream类用于从基础输入流中读取基本java数据类型,因此其构造器DataInputStream(InputStream in)不能接收File对象。
17.java.io.RandomAccessFile 类的seek()方法: public void seek(long pos) throws IOException,该方法用于设置文件指针偏移量,该偏移量相对于文件起始处,是一个读取、写入字节的位置。偏移量可以超过文件结束点,但不会改变文件的长度。只有在偏移量超过文件结束点,且有数据写入后,才会改变文件的长度。
18.java.io.RandomAccessFile类当访问的文件不存在时,如果以只读模式("r")创建,则FileNotFoundException被抛出,如果以读写模式("rw")创建,则一个0长度的文件被创建。该类实现了DataOutputStream接口,所以可以向文件直接写入基本类型数据。
19.java.lang包中的System类,一般用作基本的IO控制台打印输出信息。out是定义在System类上的一个公共静态常量,其类型为PrintStream,调用其上的System.out.print()方法打印输出信息。
20.顶层类实现了Serializable接口,但是其成员类没有实现Serializable接口,则在序列化过程中会出现java.io.NotSerializableException异常。
21.在访问流时,如果流已关闭,则会抛出IOException异常。
22.当指定的文件为只读时,创建FileWriter类实例会抛出IOException异常。

九.基础包
1.Java中每个基本数据类型都有一个对应的封装类。所有的封装类都可直接以对应的基本类型数据作为构造器参数来构造实例,除了Character封装类外,其他的封装类也都可以以字符串作为构造器参数来构造实例。
boolean Boolean char Character int Integer float Float
byte Byte short Short long Long double Double
2.封装类是不可变类,一旦赋值其值就不能再改变。
3.封装类中包含的数值可以通过equals()方法来进行比较,可以通过xxxValue()方法来提取,即将封装类转换为基本类型。封装类也提供了静态parseXXX(String s)方法来将字符串s解析为基本类型,如果字符串包含非正确数字形式,则会抛出NumberFormatException异常。封装类也提供了静态valueOf(String s)方法来将字符串s解析为封装类型,如果字符串包含非正确数字形式,则会抛出NumberFormatException异常。
Byte byteValue() Integer intValue() Float floatValue()
Short shortValue() Long longValue() Double doubleValue()
4.封装类对象可以取值为null值,在拆箱时,会抛出NullPointerException异常。
5.String类是final类,不可以被任何子类继承。String类是不可变类,调用其上定义的可改变字符串内容的方法,将返回一个新字符串,而原有字符串将保持不变。
6.java.lang.包的String类中定义的常用方法:
*char charAt(int index) // 返回指定索引处的char值
*int compareTo(String arnotherString) // 按字典顺序比较两个字符串,如果前后相等,返回0;如果前小于后,返回负数,如前大于后,返回正数。
*int conpareToIgnoreCase(Sring str) // 不考虑大小写,按字典顺序比较两个字符串
*String concat(String str) // 将指定字符串联到此字符串的结尾
*boolean contentEquals(StringBuffer sb) // 当且仅当此String表示与指定的StringBuffer相同的字符序列时,才返回true
*boolean equalsIgnoreCase(String anotherStr) // 将此String与另一个String进行比较,不考虑大小写
*boolean equals(Object anObject) // 比较此字符串与指定的对象
*int hashCode() // 返回此字符串的哈希吗
*int indexOf(int ch) // 返回指定字符在此字符串中第一次出现处的索引
*int indexOf(int ch,int fromIndex) // 从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引
*int indexOf(String str) // 返回第一次出现的指定子字符串在此字符串中的索引
*int indexOf(String str,int fromIndex) // 从指定的索引开始搜索,返回在此字符串中第一次出现指定子字符串的索引
*int lastIndexOf(int ch) // 返回最后一次出现的指定字符在此字符串中的索引
*int lastIndexOf(int ch,int fromIndex) // 从指定的索引开始搜索,返回最后一次出现的指定字符在此字符串中的索引
*int lastIndexOf(String str) // 返回最后一次出现的指定子字符串在此字符串中的索引
*int lastIndexOf(String str,int fromIndex) // 从指定的索引开始搜索,返回最后一次出现的指定子字符串在此字符串中的索引
*int length() // 返回此字符串的的长度
*String replace(char oldChar,char newChar) // 返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar而生成的
*String[] split(String regex) // 根据给定的正则表达式的匹配来拆分此字符串
*boolean startsWith(String prefix) // 测试此字符串似乎否以指定前缀开始
*boolean startsWith(String prefix,int offset) // 测试此字符串似乎否以指定前缀开始,该前缀以指定索引开始
*String substring(int beginIndex) // 返回一个子字符串
*String substring(int beginIndex,int endIndex) // 返回一个子字符串
*String toLowCase() // 将此字符串都转换成小写
*String toUpperCase() // 将此字符串都转换成大写
*String toString() // 返回此字符串对象本身
*String trim() // 返回字符串的副本,忽略前缀空白和后缀空白
7.StringBuffer和StringBuilder类都是final类,不可以被子类继承。StringBuffer和StringBulider都是可变类,StringBuffer类是线程安全的,而StringBuilder是线程不安全的,因此StringBuilder比StringBuffer速度快。这两个类具有相同的API。
8.java.lang包的StringBuffer类中定义的常用方法:
*StringBuffer append(String? str) //将指定的字符串追加到此字符序列,也可接收StringBuffer参数
*int capacity() //返回当前容量
*char charAt(int index) //返回此序列中指定索引处的char值
*StringBuffer delete(int start,int end) //移除此序列中的子字符串的字符
*StringBuffer deleteCharAt(int index) //移除此序列指定位置的char值
*void ensureCapacity(int minimumCapacity) //确保容量至少等于指定的值
*int indexOf(String str) //返回第一次出现的指定子字符串在该字符串中索引
*int indexOf(String str, int fromIndex) // 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中索引
*StringBuffer insert(int offset,String str) // 将字符串插入此字符序列中
*int lastIndexOf(String str) // 返回最右边出现的指定子字符串在此字符串中的索引
*int lastIndexOf(String str,int fromIndex) // 从指定的索引处开始,返回最右边出现的指定子字符串在此字符串中的索引
*int length() //返回长度(字符数)
*StringBuffer replace(int start,int end,String str) //使用给定String中的字符替换此序列的子字符串中的字符
*StringBuffer reverse() //将此字符序列用其反转形式取代
*void setCharAt(int index,char ch) //将给定索引处的字符设置为ch
*void setLongth(int newLength) //设置字符序列的长度
*String substring(int start) //返回一个新的String
*String substring(int start, int end) //返回一个新的String
*String toString() //返回此序列中数据的字符串表示形式
9.String类中未定义reverse()、append()和insert()方法。String类中的+连接符不能用于StringBuffer
10.String类重载了Object类的equals()方法,用来对对象的内容做比较。StringBuffer类并没有重载Object类的equals()方法,所以调用StringBuffer类的equals()方法,其实是比较对象的句柄。
11.java.util.regex.Pattern类是正则表达式的编译表现形式,指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。 因此,典型的调用顺序是:
Pattern p = Pattern.compile("a*b"); // 将给定的正则表达式编译到模式中,并赋值给模式实例p
Matcher m = p.matcher("aaaaab"); // 调用模式p的方法matcher()创建匹配器
boolean b = m.matches(); //调用匹配器的matches()方法尝试将整个输入序列与该模式匹配
boolean c = m.lookingAt(); // lookingAt()方法尝试将输入序列从头开始与该模式匹配
boolean e = m.find(); // find()方法将扫描输入序列以查找与该模式匹配的下一个子序列
在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句boolean b = Pattern.matches("a*b","aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。
12.Matcher类中定义的常用方法:
* boolean matchers() // 尝试将整个输入序列与该模式匹配
* Pattern pattern() // 返回由此匹配器解释的模式
* boolean find() // 尝试查找与该模式匹配器的输入序列的下一个子序列
* boolean find(int start) // 重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列
* int start() // 返回以前匹配的初始索引
* int start(int group) // 返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引
* String group() // 返回由以前匹配操作所匹配的输入子序列
* String group(int group) // 返回在以前匹配操作期间由给定组捕获的输入子序列
13.java.util.Scanner类是一个使用正则表达式来分析基本类型和字符串的简单文本扫描器。Scanner类使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配,
也可以调用useDelimiter(String pattern)来设置分割符号,然后使用不同的next()方法将得到的标记转换为不同类型的值。
14.Scanner类上的hasNextXXX()方法仅会测试下一个标记的值,而不会实际地获得该标记,也不会移动到下一个标记;而nextXXX()方法既能获得下一个标记,也能移动到下一个标记。
15.java.io.PrintStream类新增的两个方法format()和printf(),用于格式化输出数据。
16.NumberFormat类是一个抽象类,不能通过构造器实例化,只能通过静态NumberFormat.getInstance()方法来获取NumberFormat类实例。
17.正则表达式常用元素:
// 反斜线字符
/n 新行
/r 回车符
[abc] a、b或c
[^abc] 任何字符,除了a、b或c
[a-zA-Z] a到z或A到Z,两头的字母包括在内
. 任何字符
/d 数字[0...9]
/D 非数字[0...9]
/s 空白字符[/t/n/x0B/f/r]
/S 非空白字符[^/s]
/w 单词字符[a-zA-Z_0-9]
/W 非单词字符[^/w]
X? X,一次或一次也没有
X* X, 零次或多次
X+ X,一次或多次
18.Collection: 最基本的接口,定义了集合操作的各种方法
List: 一个允许重复项的集合接口,通过索引操纵集合元素
Queue:一个通常以先进先出的方式排列元素的集合接口
Set:一个不支持重复项的集合接口
SortedSet:一个有顺序,不支持重复项的集合接口
Map:一个支持按关键字检索的集合接口,但关键字必须唯一
SortedMap:一个支持有顺序的值、键映射接口
19.List接口的重要特征是顺序性,它可以保证元素按照规定的顺序排列。List会生成一个ListIterator,利用它可在一个列表里实现向两个方向的遍历,同时可以插入和删除位于列表中部的元素。
20.ArrayList实现了List接口,作为一个常规用途的对象容器使用,用于替换原先的Vector,允许快速访问元素,但在从列表中部插入和删除元素时,速度较慢。一般只应该应用ListIterator对一个ArrayList进行向前和向后遍历,不要用它删除和插入元素,与LinkedList相比,其效率要低很多。
21.Vector可以实现可增长的对象数组,与数组一样,它包含可以使用整数索引进行访问的组件,但是Vector的大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作。与新集合的实现不同,Vector是同步的。
22.LinkedList提供优化的顺序访问性能,同时可以高效地在列表中部进行插入和删除操作。但在随机访问时,速度相当慢,此时应换用ArrayList,该类也提供了addFist()、addLast()、getFirst()、getLast()、removeFirst()以及removeLast()方法,以便将其作为一个队列以及一个双向队列使用。
23.Queue接口队列通常以FIFO的方式排序各个元素,不过优先级队列和LIFO队列例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按LIFO得方式对元素进行排序。无论使用哪种方式,队列的头都是调用remove()或poll()所移除的元素。在FIFO队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则,每个Queue实现必须指定其顺序属性。
24.PriorityQueue是一个给予优先级堆的极大优先级队列。此队列按照在构造时所指定的顺序对元素进行排序,既可以根据元素的自然顺序,也可以根据Comparator来指定排序,这取决于使用哪种构造方法。优先级队列不允许null元素,依靠自然排序的优先级队列还不允许插入不可比较的对象,次队列的头是按指定排序方式的最小元素。如果多个元素都是最小值,则头是其中一个元素---选择方法是任意的。队列检索操作poll、remove、peek和element访问处于队列头的元素。优先级队列是无界的,但是有一个内部容量,控制着用于存储队列元素的数组大小。它总是至少与队列的大小相同。随着不断向优先级队列添加元素,其容量会自动增加。
25.添加到Set接口中的每个元素都必须是独一无二的,否则Set接口就不会添加重复的元素。添加到Set接口里的对象必须定义equals()方法,从而建立对象的唯一性。Set接口拥有与Collection接口完全相同的接口,一个Set接口不能保证自己可以按任何特定的顺序维持自己的元素。
26.HashSet用于非常小的以外的所有Set,其包含的对象必须定义有hashCode()方法。此类实现Set接口,由哈希表支持。它不保证集合的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。
27.LinkedHashSet具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到集合中的顺序进行迭代。注意,插入顺序不受在集合中重新插入的元素的影响。
28.TreeSet基于红黑树机制,这样可以获得一个顺序集合,此类保证排序后的set按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序进行排序,或按照在创建Set时所提供的比较器进行排序。此实现为基本操作(add、remove和contains)提供了可保证的log时间开销。
29.Map接口支持键-值对应关系,以便通过一个键查找相应的值。
30.HashMap实现了Map接口,构成一个散列表。针对键-值映射对进行插入和检索,具有最稳定的性能。可通过设置散列表构造器的容量和装载因子对这一性能进行调整。
31.HashTable实现一个哈希表,该哈希表将键映射到相应的值。任何非null对象都可以用作键或值。
32.TreeMap基于红黑树机制,查看键或者键-值对时,它们会按固定的顺序排列。TreeMap最大的好处就是我们得到的是已排好序的结果。TreeMap是含有subMap()方法的唯一一种Map,利用它可以返回树的一部分。
33.LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与HashMap的不同之处在于,后者维护者一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序。注意,插入顺序不受在集合中重新插入的元素的影响。
34.定义在java.util包中的Comparable接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序。实现此接口的对象列表和数组可以通过Collections.sort和Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。实现Comparable接口的类必须实现其上定义的唯一一个compareTo()方法,返回值为负整数、零或正整数,代表此对象是小于、等于或大于指定对象。
35.定义在java.util包中的Comparator接口比较函数强行对某些对象collection进行整体排序。可以讲Comparator传递给sort方法,从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构的顺序。实现Comparator接口的类必须实现其上定义的compare(T o1,T o2)方法用来比较排序的两个参数。随第一个参数小于、等于或大于第二个参数二分别返回负整数、零或正整数。
36.java.util包中的Arrays和Collections类都定义有sort()和binarysearch()方法。sort()方法用于根据元素的自然顺序对指定列表按升序进行排序或根据制定比较器产生的顺序对指定列表进行排序。binarysearch()方法用于搜索特定的元素。如果存在匹配的元素,则binarysearch()方法返回匹配元素的索引;如果没有匹配的元素,则binarysearch()方法返回(-(插入点)-1)。插入点被定义为将键插入列表的那一点,即第一个大于此键的元素索引。如果列表中的元素都小于指定的键,则为list.size()。
37.Arrays类的asList()方法用于从一个数组创建一个列表,并将它们链接起来。
38.Collections类的reverse()方法用于反转指定列表中元素的顺序。
39.泛型多态赋值只应用于泛型主题集合,而不是泛型类型参数。
40.通配符语法允许泛型方法接受方法参数的声明类型的子类型或父类型。使用通配符时,集合只能访问不能被修改。
41.<?>代表可以保存任何类型对象。
42.泛型声明约定T表示类型,E表示元素。
43.泛型类型标示符可以用在类、方法或变量声明中,编译时将替换实际的类型。
44.在一个方法声明中可以使用多个参数化类型。不能将T用作返回类型。如果在方法的参数中使用T,则必须在返回类型前申明<T>。
45.java.util.Date类表示特定的瞬间,精确到毫秒,被存储为long值。Date类中定义的常用方法如下所示:
Date() //分配Date对象并初始化此对象,以表示分配它的时间
boolean after(Date when) //测试此日期是否在指定日期之后
boolean before(Date when) //测试此日期是否在指定日期之前
int compareTo(Date anotherDate) //比较两个日期的顺序
boolean equals(Object obj) //比较两个日期的相等性
String toString() //把此Date对象转换为String:dow mon dd hh:mm:ss zzz yyyy形式,其中dow是一周中的某一天(Sun Mon Tue Wed Thu Fri Sat)
46.java.util.Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR,MONTH,DAY_OF_MONTH,HOUR等日历字段之间的转换提供一些方法,并为操作日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。Calendar是一个抽象类,因此不能被实例化,只能通过静态方法Calendar.getInstance()方法来获取Calendar类实例。Calendar类中定义的常用的方法:
void add(int field, int amount) //根据日历的规则为给定的日历字段添加或减去指定的时间量
static Calendar getInstance() //使用默认时区和语言环境获得一个日历
int get(int field) //返回给定日历字段的值
void roll(int field,boolean up) //在给定的时间字段上添加或减去单个时间单元,不更改更大的字段
void roll(int field,int amount) //向指定日历字段添加指定时间量,不更改更大的字段
47.java.text.DateFormat 是一个抽象类,用于日期/时间的格式化,它以与语言无关的方式格式化并分析日期或时间。DataFormat类不能被实例化,只能通过静态方法DateFormat.getInstance()或DateFormat.getDateInstance()方法来获取DateFormat类实例。DateFormat类中定义的常用方法如下:
DateFormat getInstance() //获得为日期和时间使用SHORT风格的默认日期/时间formatter
DateFormat getDateInstance() //获得日期formatter,该formatter具有默认语言环境的默认格式化风格
String format(Date date) //将一个Date格式化为日期/时间字符串
Date parse(String source) //从给定字符串的开始分析文本,以生成一个日期
48.java.util.Locale类对象表表示了特定的地理、政治和文化地区。其中有两个构造器Locale(String language)和Locale(String language,String country)。Locale类中定义的常用方法如下:
Locale getDefault() //静态方法返回一个Locale实例
String getDisplayCountry() //返回适合向用户显示的语言环境国家名
String getDisplayLanguage() //返回适合向用户显示的语言环境语言名

分享到:
评论

相关推荐

    java学习,scjp试题,笔记,非常的全面,corejava工程

    Java是一种广泛使用的面向对象...通过学习笔记,可以了解作者在实践中遇到的问题和解决方法;通过SCJP试题,可以评估自己的学习进度,找出需要加强的部分。无论你是自学还是参加培训,这都是一个非常有价值的参考资料。

    scjp试题。rar

    SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)是Oracle公司为Java程序员提供的一项认证考试,旨在验证考生对Java编程语言的基础知识和理解。SCJP现在被称为OCP (Oracle Certified ...

    scp(x)055 资料

    SCP(X)055资料是针对SCJP(Java Programmer)认证考试的一项重要资源,这个压缩包文件包含了丰富的学习材料,对于准备参加SCJP055考试的学员来说是非常有价值的。SCJP是Sun Microsystems(现在已被Oracle公司收购)...

    能源领域:基于MATLAB的阶梯式碳交易与供需灵活双响应综合能源系统优化调度

    内容概要:本文详细介绍了考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度方法。在供给侧,引入了有机朗肯循环(ORC)实现热电联产机组的灵活响应;在需求侧,提出电、热、气负荷之间的可替代性,以提高能源利用效率。构建了以最小化碳排放成本、购能成本、弃风成本和需求响应成本为目标的优化调度模型,并采用MATLAB和CPLEX进行了模型构建和求解。文中提供了具体的代码示例,展示了如何处理热电耦合、负荷替代和阶梯式碳交易等问题。 适合人群:从事能源系统优化、电力系统调度、碳交易等相关领域的研究人员和技术人员。 使用场景及目标:适用于需要优化能源系统调度、降低成本并减少碳排放的实际应用场景。目标是帮助读者理解和掌握如何通过先进的技术和算法实现更加灵活和高效的能源调度。 其他说明:文章提供了完整的代码实现和服务支持,包括12种典型场景的数据集和预设模型,方便读者快速上手实践。

    工业自动化中欧姆龙CP1H与东元N310变频器基于Modbus RTU通讯的实战程序

    内容概要:本文详细介绍了一个利用欧姆龙CP1H PLC及其CIF11通讯板与三台东元N310变频器进行通讯的实战案例。主要内容涵盖硬件配置(包括接线方式和终端电阻设置)、变频器参数设置(如波特率、站号等)、PLC编程(含频率设定、实际频率和输出电压读取的具体指令及其实现方法)、以及调试过程中遇到的问题和解决方案。此外,还提供了关于如何扩展更多变频器的方法,强调了通讯稳定性和高效性的优化措施。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要掌握PLC与变频器通讯技能的人群。 使用场景及目标:适用于需要对多个变频器进行集中控制和监测的应用场合,如工厂生产线、电力系统等。主要目的是提高系统的集成度和可靠性,降低维护成本。 其他说明:文中不仅给出了详细的代码片段,还包括了许多宝贵的实践经验,对于初学者来说是非常好的参考资料。同时,作者也提到了一些常见的陷阱和注意事项,有助于读者少走弯路。

    基于Simulink的TCR+FC型SVC无功补偿仿真模型构建与优化

    内容概要:本文详细介绍了如何在Simulink中构建TCR+FC型静止无功补偿器(SVC)的仿真模型。首先,文章解释了TCR(晶闸管控制电抗器)和FC(固定电容器)的工作原理及其在电力系统中的重要性。接着,逐步讲解了模型搭建的关键步骤,包括晶闸管参数设置、触发脉冲生成、滤波器设计以及控制策略的选择。文中特别强调了触发角控制对补偿效果的影响,并提供了具体的MATLAB代码示例。此外,作者分享了许多实践经验,如如何应对现场环境变化带来的参数偏差、如何防止谐振等问题。最后,通过对不同工况下仿真结果的分析,展示了该模型在改善电压稳定性、提高功率因数方面的显著效果。 适合人群:从事电力系统研究和技术开发的专业人士,尤其是那些希望深入了解SVC工作原理及其仿真方法的研究人员和工程师。 使用场景及目标:适用于需要进行电力系统无功补偿装置性能评估、优化设计的研究机构或企业。主要目标是在确保系统稳定性的前提下,最大化提升无功补偿效率,降低谐波污染,从而保障电网的安全运行。 其他说明:文中不仅提供了详细的建模指导,还包括许多实用的小贴士和注意事项,帮助读者避开常见陷阱,快速掌握核心技术要点。同时,附带的实际案例分析有助于加深理解,使读者能够将所学应用于实际工程项目中。

    spring-ai-chroma-store-1.0.0-M6.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    智云物业小程序v3.5.0高级版+微信+支付宝前端.zip

    智云物业小程序v3.5.0高级版 微信 支付宝前端 版本号:3.5.0智云物业 抄表可以直接录入表号 社区发图多由5张改为9张 添加付出通道对接 车位锁bug批改 细节调整和优化 功能特色: 1. 可视化楼宇房产管理,一键生成楼宇房产(支持EXCEL导入) 2. 住户管理(业主、成员、租户),严格、宽松和自由三种注册方式 3. 报修和投诉建议完整处理流程(派单与抢单),内部工单处理(派单与抢单) 4. 智能门禁(微信开门、定位防骚扰、开门日志)、人脸识别、蓝牙 5. 商铺和车位管理,一键生成或EXCEL导入 6. 多收费项目管理,批量生成账单,前后台收银,可视化管理 7. 社区论坛、邻里互动、新动态 8. WQ独立后台、物业独立后台,权限角色完全分开 9. 版权自定义设置、页面自定义图标及链接 10. 统计分析报表、打通WQ会员、会员组及积分 11. 物业手机端住户管理、上门收费、账单核销、抄表录入、巡更 12. 线下周边商家(集积分、支付、活动、红包于一体) 13. 积分红包、挪车服务、打包小程序、智能充电站、自助智能设备(如:洗车机、饮水机等) 14. 全局权限控制、公众号授权、自定义系统帮助 15. 对接多家车牌识别管理系统,在线缴费、办理月卡、统计报表 16.?快递驿站、活动管理(投票、报名、问卷)、管理看板

    西门子S7-1200 PLC在新能源物料输送系统中的RS485通讯与称重仪表集成应用

    内容概要:本文详细介绍了在一个新能源物料输送系统中,利用西门子S7-1200 PLC和昆仑通态触摸屏实现物料输送控制的具体方法。主要内容涵盖硬件配置(如PLC、称重仪表、RS485通信模块)、通信配置(如RS485参数设置)、软件开发(如博途V16编程、模拟量采集、物料输送控制逻辑)以及触摸屏组态开发等方面。文中不仅提供了具体的配置步骤和技术细节,还分享了许多实际开发中的经验和常见问题解决方法。 适合人群:自动化领域的工程师和技术人员,尤其是那些正在从事或计划从事PLC控制系统的开发和维护工作的人员。 使用场景及目标:适用于需要开发类似物料输送系统的工程项目,旨在帮助读者掌握PLC控制系统的开发技能,提高系统稳定性和可靠性,减少开发过程中的错误和问题。 其他说明:文中提到的实际案例和开发经验对于理解和解决工业自动化项目中的常见问题非常有帮助。同时,文中提供的代码片段和配置示例可以直接应用于实际项目中,方便读者快速上手。

    光伏储能与虚拟同步发电机并网的Matlab/Simulink建模及优化

    内容概要:本文详细介绍了如何在Matlab/Simulink环境下构建光伏储能系统与虚拟同步发电机(VSG)并网的模型。首先,文章阐述了整体思路,即实现直流侧光储与VSG并网的完美配合。接着,分别讲解了光伏部分、储能部分和VSG部分的具体实现方法,包括光伏电池模型的选择、储能电池的参数设置以及VSG控制算法的设计。此外,文章还讨论了光照强度变化的设置及其对系统的影响,并提供了详细的波形分析。最后,针对模型调试过程中遇到的问题提出了有效的解决方案。 适合人群:从事电力电子、新能源发电领域的研究人员和技术人员,尤其是熟悉Matlab/Simulink工具的用户。 使用场景及目标:适用于希望深入了解光伏储能系统与虚拟同步发电机并网机制的研究人员和技术人员。主要目标是掌握如何在Matlab/Simulink中搭建和优化此类模型,以便更好地应用于实际工程实践中。 其他说明:文中提供的代码片段和调试技巧对于初学者非常有帮助,同时也为高级用户提供了一些优化建议。通过对不同参数的调整,如虚拟惯量、阻尼系数等,可以进一步提高系统的稳定性和响应速度。

    【蓝桥杯EDA】客观题解析:第十二届省赛第二场真题.pdf

    【蓝桥杯EDA】客观题解析

    J1939信号详解及SPN查询表

    表格可以详细查询到商用车CAN通信里每个信号具体的定义,SPN,每一位信号的定义

    直驱永磁风机Simulink仿真模型:内外双环控制、低电压穿越及MPPT研究

    内容概要:本文详细介绍了直驱永磁风机的Simulink仿真模型,涵盖了机侧和网侧控制、低电压穿越控制(chopper电路控制)、风速模拟及最大功率点跟踪(MPPT)。机侧控制采用了内外双环结构,通过零d轴电流(ZDC)控制降低铜损,提高效率;MPPT则通过最优转矩(OTC)控制实现。网侧控制包括并网和脱网两种模式,分别采用双闭环解耦控制和闭环无源逆变控制。低电压穿越控制通过chopper电路确保电网电压异常时风机的稳定运行。风速模拟部分使用了复杂的风速模型,使仿真更加接近实际情况。此外,文中还提到了详细的参数设定和调试经验,以及相关文献的支持。 适合人群:从事风电系统设计、仿真建模的研究人员和技术人员,尤其是对直驱永磁风机及其控制系统感兴趣的工程师。 使用场景及目标:适用于需要深入了解直驱永磁风机Simulink仿真的研究人员和技术人员。主要目标是掌握直驱永磁风机的控制策略,包括内外双环控制、低电压穿越控制、风速模拟及MPPT的具体实现方法,以便应用于实际项目中。 其他说明:文中提供的代码片段和参数设定有助于读者更好地理解和应用这些控制策略。同时,参考文献也为进一步研究提供了理论依据。

    基于Simulink的永磁同步电机多故障诊断与处理策略

    内容概要:本文详细介绍了如何在Simulink环境中构建永磁同步电机(PMSM)的多故障诊断模型,特别是针对绕组匝间短路和转子偏心故障的联合诊断。文章首先展示了如何通过MATLAB代码实现绕组电阻变化模型,解释了故障注入的关键参数设置及其背后的物理意义。接着讨论了混合故障建模的方法,强调了机械偏心和电气短路之间的耦合关系,并提供了具体的Simulink模块连接方式。文中还探讨了多种先进的故障特征提取技术,如改进的S变换、小波包分解以及经验模态分解,并推荐使用MATLAB的signalDiagnosticDesigner工具来自动生成特征提取代码。此外,文章介绍了不同类型的观测器设计,包括磁链观测器和滑模观测器,并分享了一些实用的经验技巧。最后,文章提出了几种有效的故障分类算法,如改进的KNN和支持向量机结合长短期记忆网络的混合模型。 适合人群:从事电机控制系统设计的研究人员和技术工程师,尤其是那些对永磁同步电机故障诊断感兴趣的从业者。 使用场景及目标:适用于希望深入了解永磁同步电机内部故障机制并在Simulink平台上进行仿真的专业人士。主要目标是提高故障检测精度,优化故障处理策略,确保系统的稳定性和可靠性。 其他说明:文中提供的代码片段和建模思路可以帮助读者快速入门并掌握复杂的故障诊断流程。同时,作者还分享了许多宝贵的实践经验,有助于避免常见的错误和陷阱。

    三菱Q系列11轴运动控制系统:PLC程序、触摸屏程序及电气设计详解

    内容概要:本文详细介绍了三菱Q系列11轴运动控制项目的实施细节,涵盖PLC程序、触摸屏程序、电气清单及完整电路图。PLC程序采用分工位编辑,确保各工位独立控制,便于调试和维护。触摸屏程序实现了对各工位的实时监控和参数修改,增强了系统的灵活性。电气清单详尽列出所有电气元件及其规格,电路图展示了元件间的连接关系,有助于现场布局和故障排查。此外,文中还涉及定位模块和模拟量模块的应用,提升了系统的控制精度和稳定性。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些负责多轴运动控制系统的开发和维护人员。 使用场景及目标:适用于需要进行复杂多轴运动控制的工业生产线,旨在提高生产效率、降低维护成本,并提供详细的编程和设计指导。 其他说明:文章不仅提供了具体的代码示例和电路图,还包括了许多实用的设计技巧和注意事项,如异常处理机制、信号隔离方法以及变量命名规范等,这些都是实际项目中非常宝贵的经验总结。

    晫璨智慧环卫建设解决方案PPT(32页).pptx

    在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。

    MATLAB车牌识别技术详解:从图像预处理到字符识别的全流程解析

    内容概要:本文详细介绍了基于MATLAB的车牌识别技术,涵盖了从图像预处理到最终字符识别的完整流程。首先,文章强调了MATLAB环境配置及相关图像处理工具箱的重要性。接着,逐步展示了核心代码片段,如图像读取、灰度转换、边缘检测、形态学操作、轮廓提取、车牌区域筛选等关键技术。此外,还探讨了字符分割方法,包括垂直投影法和连通域分析,并介绍了模板匹配用于字符识别的具体实现。文中不仅提供了代码示例,还附带了详细的Word版解析,解释了各个函数的作用及参数选择依据,帮助读者深入理解每一环节的工作机制。 适合人群:对图像处理和车牌识别感兴趣的初学者、有一定编程基础的研究人员和技术爱好者。 使用场景及目标:适用于学术研究、教学演示以及小型项目的快速原型开发。主要目标是使读者能够掌握车牌识别的基本原理和技术细节,从而应用于实际场景中。 其他说明:文章特别指出了一些常见问题及其解决办法,例如如何应对复杂光照条件、字符粘连等问题,并给出了具体的优化建议。同时,强调了代码实现过程中需要注意的各种细节,如参数调整、图像预处理等,以提高识别精度。

    【模型预测控制MPC】使用离散、连续、线性或非线性模型对预测控制进行建模附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    误码率二进制相移键控 BER 8PSK附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    一种利用并网变流器获得最大允许电网支持的分析方法[MAS技术 变流器电网支座分析优化]附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics