java
1.垃圾收集器的概念
2.继续器(一个类)与继承器的概念
3.在java中,所有的类都应从一个基础类中继承即所谓的单根结构,为什么c++不采用这种单根结构呢?而java就可以,因为有JVM吧,不是因为有接口能弥补这个不足
4.下溯造型与模板/通用性????
5.多线程-----共享-----锁synchronized关键字
6.注意一个java的源代码文件中可以定义多个类,但是其中只能有一个类含有main方法,因为main方法是函数执行的入口点,这个含有main方法的类就是主类,按照惯例这个类名就是java的源文件名
7.高级语言按照执行模式可分为编译型和解释型
8.最终类的概念--final,
9.域---静态域---静态初始化器---最终域---易失域
10.实现多态的两种方法:1)覆盖,发生在有继承关系的类中)重载,发生在同一个类中
11.方法的继承与域的覆盖的区别在于:子类隐藏父类的域只是使之不可见,父类的同名域在子类中仍然占有自己的独立的内存空间;而子类方法对父类同名方法的覆盖将清除父类方法占有的内存,从而使父类方法在子类对象中不复存在。
12.接口也能继承,接口中的所有的属性都是public static final,方法都是public abstract.在接口中只能给出抽象方法的方法名,返回值和参数列表,而不能定义方法体。
接口的抽象方法的访问限制都已指定为public,所以类在实现方法时,必须显示的使用public修饰符,否则将被系统警告为缩小接口中定义的方法的控制范围。
13.学习面向对象的思想,知道合适的方法一定要放到合适的类里面,----设计原则
14.类与类之间的关系体现在代码里就是一个类的对象是另一个类中方法的参数。
15怎样建立面向对象的思想呢?一把事物抽象成一个类,二为这个类找出属性和方法,三考虑类与类之间的关系(继承,组合,聚合,实现,多态)
16.对象是java程序的核心,在java中“万事万物皆对象”。
17.普通函数也能构成重载,不仅仅是构造函数
18.返回值,局部变量,形参都是在stack内存里分配空间,当变量的生命周期结束时,内存自动被释放,而对于heap内存里对象则会永久保存,除非没有引用指向他之后再由垃圾处理器回收。
19.静态变量和字符串常量都存放在data seg里
20.编译出的.class文件必须要和包的层次一致,即必须要放到合适的包里
21.要在一个包里引用另一个包的类直接new一个裸体是不行的,必须要把包的名字给写全了,或者在这个类的开头把这个类连包名一起引入
22.在new一个子类对象里面会包含自动包含一个父类对象,一起都分配到对内存里,父类的所有东西都归子类拥有,子类对象可以直接掉用父类的方法和成员,但是如果是父类私有的东西却只有拥有权没有访问权
23.子类的构造方法中必须要调用父类的构造方法,可以用子类的super显示的调用(父类的构造函数是带参数的)也可以隐式的调用但要保证父类有无参的构造函数,不然编译器就会报错,也这个调用要写在子类构造方法的第一行。也可以用this调用子类的其他的构造方法。
24.如果子类没有显示的调用父类的构造方法(既没有调用父类有参数的构造方法),而基类有没有无参的构造方法此时编译出错,解决错误的方法就是在基类加上一个无参的构造方法
25.对象转型(casting)基类对象的引用可以指向子类对象,但不能调用子类新增加的成员和方法,转型可分为向上转型(upcasting)和向下转型(downcasting),可以用 instanceof 类名来判断该引用对象是否是当前类或其子类的实例
26理解对象转型对于可扩展性带来的好处:使用基类引用指向子类,传进函数的是任何一个子类对象都可以,只要在函数中运用instanceof 类名加以判断之后在利用对象的强制类型转换即可。
27.动态绑定(多态)是在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用其相应方法。
28.多态的三个重要条件:1,要有继承2.要有方法的重写3.要有父类引用指向子类对象
29.接口可以多重实现,接口中声明的属性默认是public static final,也是能是这样;接口中只能定义抽象方法,这些方法默认是public的也只能是public;接口可以继承其他接口,并且可以添加其他的属性和方法;
30.多个无关的类可以实现同一接口,同一个接口可以被多个无关的类实现,与继承关系类似,接口与其实现类可以实现多态。
31.要从小养成良好的变成习惯,不要把异常给吞噬掉也不要轻易的往外抛异常,遇到异常自己能处理的一定要处理。实在处理不了的就反馈给上一级直接throw Exception即可。
32.异常里掌握一个结构图(throwable类———Error和Exception(一般的Exception和RunTimeException))和五个关键字即可(try,catch,throw,throws);
33.重写方法时应该抛出与基类方法一样的异常或不抛异常
34.对于自己定义的异常要在方法里进行声明,然后在调用该方法时一定记得要抛出异常
35.java语言声明数组时不能指定数组的大小,因为他只是一个引用,分配在stack里,只有在new 时可以指定数组的大小因为new出来的东西都放在了heap里,如果new出来的是对象的引用则在heap里分配的是相应的引用。
36.每个数组都有一个属性length,记住是属性不是方法,每个数组都可以调用其这个属性尤其是在写循环时可以灵活的使用。
37.容器类对象在调用remove和contains方法时要比较两个对象是否相等,调用的是equals和hashCode方法,对于自定义的类型一定要重写这两种方法以实现自定义对象的相等规则,尤其是要调用hashCode()的值做索引时就会一定要重写hashCode()这方法,当时字符串对象做比较时可以直接调用字符串对象的hashCode()方法,因为她已经被重写了。
要重写equals()方法就必须先重写hanshCode()方法
38.如何选择数据结构?看读的效率和改的效率(array,list,hash)
39.再利用自动boxing和自动解包的时候要考虑是否会有空值存在
40.c语言或C++语言不能被移植的一个很重要的原因是他们表示每种数据类型在不同的操作系统上占的字节数不同,有可能会产生溢出
41.Java的char型采用unicode 编码,一个字符占两个字节是为了扩充编码的表示范围,可以表示世界上任何的一种字符
42.byte,short,char型在做运算时二话不说先将自己转化成int类型,可以直接将一个int型的值直接赋给一个byte,不需要进行强制转换,只要这个int不超出byte的表示范围就行即127就行。
43.double转换成float型会发生溢出错误,而int转换成byte则不会出错是因为int在内存中是四个字节,byte是一个字节,在转换是将其他三个字节砍掉即可,而float在转换时就不能随便砍掉,因为他要根据那小数点来计算这个数到底是多少。
44.在将long类型赋值给long类型时一定记得加上l或L,将float赋给float型记得加上f,说白了由于在计算机里默认的是int 型和double 型,所以你在float和long型就要特别注意了,因为他们会有默认的型有重合现象,计算机会全部当作默认处理,当在默认的情况下无法处理时就会报溢出错误。
45.关于编程的格式强调一下几点:
1)括号对其
2)遇到{ 就缩进,选中用tab键
3)程序块之间加上空格
4)并排语句之间加上空格
5)运算符两侧加上空格
6){前面有空格
46.搞清楚逻辑与&逻辑或|和短路与&&短路或||的区别,主要在于计算表达式的值时,对于逻辑与或不管第一个表达式的值是多少后面的表达式的值都要被执行,而短路与或只要第一个表达式的值能够确定整个表达式的值第二个表达式就不会被执行了
47.在数值转换时,一般规则是大的表数范围往小的表数范围转换时要加强制类型转换,但是int往short,byte,char转换时就不用类型转换了,但要注意不要超出他的表数范围,(short 32768;char 256;byte 127)
48.字符串连接符+,只要+号两边的操作数有一个是string型的,系统会自动将另一个操作数转换成string做连接运算
49.当进行打印时无论是什么类型都自动转换成字符串打印出来
50.break终止整个程序,后面的都不被执行,continue只终止当前的一次循环,后面的可继续执行
51.在利用循环语句要有在循环语句里设计数器的概念和设boolean标志符的概念,这样可以解决设计中的很多问题,也是常用的技巧
52.一个良好的编程方式要在每次调用 close()之前调用flush(),先让内存的数据写到一缓冲区去,防止意外的调用close()导致文件不能读写
53.output==write意思是将程序通过某一个变量或者字符串接收的内容写到new出来的文件里(若原来没有这个文件他会自动生成),input==reader,意思是将文件里的内容往程序里输,利用某个变量接收(int或字符串型)。
54.阻塞式的输入system.in,程序会阻塞在那里一直等待你输入后按回车
55.如果想把某个对象序列化以便能够用object流进行输入和输出,必须实现serializable这个接口
56.tranzient 透明化,修饰的成员变量在调用object流时被置为null或0;
57.关于内部类的使用,要注意三点:必须写在包装类的里面方法的外面,要知道写错了编译不会报错,到时候结果不对死活检查不出来是哪里出问题了,2)内部类的好处是可以直接访问包装类的成员,3)当这个类不允许或不需要别的类访问时把它声明为内部类,这样能使层次更加鲜明清晰。
58.JDBC编程步骤:
1)Load the driver
11)Class.forName().newInstance()
12)实例化是自动向DriverManager注册,不需要显示的调用DriverManager.registerDriver()方法
2)Connect the database
DriverManager.getConnection();
3)Excute the SQL
11)connection.createStatement ();
12)Statement.executeSQLQuery();
13)Statement.executeSQLUpdate();
4)循环取得结果集
resultSet rs
while(rs.next())
5)show the result data
将数据库中的各种类型转化为java中的各种类型(get###());
6)close()
close resultSet()/close.statement()/close.connection()
原则是后打开的先关
59.检验一条sql语句是否正确,很简单,你把它做个输出不就完了嘛!检验一个变量的值是否正确。很简单,你把它输出不就ok了嘛!
60.要知道命令行参数全都放在看了args 数组里
61.各种基本类型的valueOf(String s)只是得到相应基本对象的实例,必须还要用doubleValue()转化为相应的值
l例如,number = Double.valueOf(text.getText()).doubleValue();