java
StringBuilder类
int length() 求构建器中的代码单元的数量
StringBuilder append(String str) 追加一个字符串并返回this
StringBuilder insert(int offset,String str) 在offset 位置插入一个字符串并返回this
StringBuilder delete(int startIndex, int endIndex) 删除偏移量从startIndex 到--endIndex-1 的代码单元并返回this
String toString() 返回一个与构建器或缓冲期内容相同的字符串
Scanner 类
Scanner in= new Scanner(System.in);
System.out.printf("yuyi,test\n");
String name=in.nextLine();
System.out.printf("%s", name);
nextline() 取出的是一行
next() 取出的是一个单词
Scanner类的输入是可见的,所以Scanner 类不适用 控制台读取密码。。。
Console类
Console cons=System.console();
String username =cons.readLine("username");
char[] passwd=cons.readPassword("输入密码:");
System.out.printf("%s,%s",username,passwd);
这个要在控制台里运行,不要在ide里运行。
要对文件进行读取,则要构建一个scanner对象
Scanner in = new Scanner(Path.get("文件名"));//要先拿到路径对象。
想要写文件:
PrintWriter out= new PrintWriter("只要写文件名")
如果在ide环境里可以使用 String dir= System.getProperty("user.dir") 用来找到路径位置。
如果不想这样,那就用绝对路径。
label:{ for(){。。。;break label}。。。 } // 则跳出最外层label循环。
java中允许长度为零的数组。。。长度为零的数组又不同于null。。。
数组结果为空,则刚好可以接收结果集。申明: new element [0]
数组的copy 将同时引用同一片空间。
数组里的fill 函数:static void fill(type[] a, type v)//将数组的所有数据元素值设置为v
多维数组的遍历:
for(int [] row :a)
for(int val:row)
do sth;
this : 将实例域与局部变量区分开来,因为调用本类的方法时候,默认会把类名作为隐形参数传过来。用this 就可以调用。
书写规范: 类名大写;
参数方法,参数 第二个大写
内部局部变量小写
返回堆上数据的访问器用clone 方法;
类内变量设置为private 但是方法设置为 public
final类对象一旦被构建,没构建还是可以第一次构建的,将不允许被修改。
类里的静态变量(比如线程池里的计数器),是所有生成的对象里都共同访问的同一个变量空间。
?????本地方法,比如system里的setOut 方法 它可以改变final 变量的值。 它不是java语言实现的,本地方法可以绕过java 语言存取控制机制?????
java对象引用(类)的传递进行的是值传递。(把引用当成值传递)
编译器对文件(带有文件分隔符和扩展名.java的文件)进行操作。 而java 解释器加载类(带有.分隔符)
编译器在编译源文件的时候不检查目录结构,即使目录下也可以进行编译。如果不依赖于其他包就不会出错,但是无法运行,因为虚拟机找不到类文件 。
this 有两个用途:1、引用隐式参数 2、调用该方法的其他的构造器 (this可以表示对象)
super 的两个用途 :1、调用超类的方法 2、调用超类的构造器(super不是一个对象的引用,不能将super赋给另一个对象变量)
多态:就是”is a “ 规则,它表明子类的每个对象也是超类的对象。
不能将超类的引用赋给子类的变量。
动态绑定(方法重载)--》方法名---》参数类型---》private ,static ,final 方法(静态绑定)---》在方法列表里查找然后选择最合适的方法(从子类到超类层级查找)运行,super关键字将直接查找超类。
将类中的域标记为private 而 方法标记为public
编写一个equals 方法完整流程
1、判断 this==otherObject
2、检测otherObject 是否为null
3、检测 getClass() 是否等于 otherObject.getClass()
4、otherObject instanceof ClassName
5、强制类型转换 能否成功 ClassName other = (ClassName)otheObject
6、对所有的域比较;使用==比较基本类型域 用equals 比较对象域, 如果所有域都匹配就返回true
对于数组类型的域,可以用静态的Arrays.equals 方法检测相应的数组元素是否相等。
hashCode() 返回对象的散列码,散列码为任意的整数,包括正数或负数。两个相等的对象要求返回相等的散列码。
强烈建议为自定义的每一个类增加一个toString()方法。
ArrayList 类型 用size()方法得到 链表长度。
ArrayList<Employee> staff = new ArrayList<Employee>(1000);
staff.size();
访问和改变值: set 和get 如 staff.set(i,harry); staff.get(i);
Integer n=3 ; n++;//这个先拆箱在装箱;
int x=Integer.praseInt(n);
Employee e;
Class cl=e.getClass(); 返回一个Class类型的实例;
反射:
static Class forName(String className)//返回描述类名为className 的Class 对象
Object newInstance() // 返回这个类的一个新实例。
出错时候在catch 里 用 print e.printStackTrace();
Field[] getDeclaredFields() 将返回包含Field 对象的数组,这些对象记录了这个类的全部域
Method[] getDeclareMethods() 返回这个类或者接口的全部方法,但不包含由超类继承了的方法。
Constructor[] getDeclaredCOnstructors() 返回该类所有的构造器
boolean isAccessible() //返回反射对象的可访问标志的值
field.setAccessible(true) // 表示可以设置访问级别为可访问
field.get(object) //表示拿到object对象的field 内容。
一个对象数组不能转换成雇员数组(Employee[]) ,将一个Employee[] 临时的转为Object[] 数组,然后把它转回来是可以的,但是一开始是Object类型却永远没法转为Employee [] 类型。需要能够创建与原来数组类型相同的新数组。
method.invoke(参数变量) // 静态方法 用的是:method.invoke(null,参数变量) ;
但是invoke 的参数和返回值必须是object 类型。这就意味着必须经过多次类型转换
接口中的方法默认的被设置成public,域也被直接设置为public static final
默认的克隆操作室浅拷贝,他并没有克隆包含在对象中的内部对象。
即使clone 的默认实现(浅拷贝)能够满足要求,也应该实现Cloneable 接口,将clone重新定义为public 并调用super.clone()
想要定义一个回调函数又不想写大量代码的,使用匿名内部类会比较便捷。