java学习总结1

来源:互联网 发布:mysql批量insert bug 编辑:程序博客网 时间:2024/05/22 15:52

参考书目:《21天学通java》,《java第一步》

JAVA的三大特征:继承,封装,多态。
对象可以通过限定符等手段控制外界对它的了解程度以及如何进行交互,这就叫做封装
方法的重载和方法的覆盖实现了多态//我的理解就是一个对象对同一消息的不同响应,或者是同一接口的不同实现方法。
子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,这就叫做继承
1.实例变量,实例,对象,类,类变量相互之间还有自身之间的关系?
实例变量(对象变量)定义了特定对象的属性,值随对象而定。
实例变量和类变量都是全局变量,之间区别在于static。每个实例都有实例变量的一个副本,而类变量只有一个,修改以后会改变所有对象中的值。
对象也可以作为实例变量例如,String类型的变量。
实例变量和类变量以及方法共同构成了类。
2.数据类型分为基本数据类型对象型的数据类型
对象型的数据类型不仅包含了对应的基本数据类型还包含了其方法。
区别就是 栈内存中 基本类型存放的是数值,引用类型存放的是引用的 类在堆内存中的地址
基本数据类型:int char double float short long Boolean Byte
对象型数据类型(均为首字母大写):Byte Boolean Character Short Integer Long Double Float
(类似的还有String,point)
//句柄就是指向内存里面对象首地址的引用(32bit)
3.对象的创建过程。
创建给定类的实例,分配内存空间,调用构造方法:
如String s1=new Sring(“hello world”)
其中s1是对左边的实例的引用,存储在变量空间s1的内容就是实例的首地址就是对实例的引用。引用是一个地址,他指明了对象的变量和方法的存储。多个对于对象的引用就是同一个地址,修改一个其他都要变。//类似于指针?(就是可以理解为c中的指针,只不过在JAVA中并没有显式的指明出来。)
每个实例都有实例变量的一个副本,而类变量只有一个,修改以后会改变所有对象中的值。使用. 访问对象中的变量或者方法,所以实例变量只能使用对象名来访问,而类变量或者是类方法可以由对象名或者类名来访问修改。
格式化输出:通过调用类方法System.out.format()格式化输出。(类似于c语言的格式化输出)。
嵌套方法的调用:如果方法返回了一个对象,可以调用该对象的方法。
例如customer.cancelOrder().fileComplaint()
或者private Color createColor(int r,int g,int b)
{
    return new Color(r,g,b);
}
上例中前一个对象的方法返回了一个对象,在这个对象中定义了fileComplaint()方法。
还可以嵌套访问实例变量:
System.out.println()
System类中存在一个out类变量存储了1个PrintStream实例,该实例中有一个方法println().
4.强制类型的转换。
基本类型的转换:(typename)value(注意精度问题)
强制转换对象:(classname)object(1.目标与源目标值将应该是继承关系。2.创建的  classname对象只是一个引用,原来的对象继续存在。3.超类向子类转换的时候,不能 调用子类的某些方法,精度会降低。)
基本类型和对象之间的相会转换:自动封装和拆封。
Float f1=new float(12.5);//自动封装
Float f2=new float(13.6);
System.out.println(math.min(f1,f2));//自动拆封
5.对象的比较,判断对象所属的类。
在java当中==,!=都只适用于基本类型,对象都只是引用,如果使用
str1==str2则会返回false,当两者引用相同对象的时候返回ture,
str1=str2;
str1==str2返回ture
对于类似String的引用类型,当字符串参数相同的时候,但是由于并没有指向同一个对象,所以使用==返回false,在这里可以使用equals()方法来进行比较,该方法是Object类的方法。在每个具体的类中的实现不相同,可以更具自己的需要进行覆盖。(例如该方法在String对象中是比较string字符串数组是否相同,如果相同返回ture,不同返回false)。
//直接打印对象的结果?是引用的地址还是对象的地址?直接打印是调用的toString()方法转换成字符串输出,一般都要覆盖掉这个方法。
test obj=new test();
System.out.println(obj);//等同于System.out.println(obj.toString());当Java对象和字符串进行连接运算时,系统会自动调用Java对象toString的返回值和字符串进行连接运算。
此时的输出是类似于obj@6544456就是"类名 + @ + hashCode值"
通过在test中覆盖掉toString(){
Return “这是一个测试”;}
然后再执行上述语句,输出结果就是这是一个测试。
6.判断对象所属的类。
可以通过反射机制来判断。
String name=key.getClass().getName()
也可以使用运算符instanceof,它使用两个操作数,左边是对象的引用,右边是类名或者是接口名。如果有继承关系则返回true,没有则返回false。
7.限定符的使用。
无限定符(默认):只能被同一个包中的类使用。
私有(private):只能在自身的类中被使用,不能被子类所继承。一般是比较重要的变量且  不希望被其他类修改。//其方法是隐式的申明final限定符
可以在类中设置公有方法又叫存储器方法set()和get()分别修改私有变量:
Setvaluenamevalue){
              this.y=value;//假设私有变量为整数对象y
}
int getvaluename(){
              return this.y;
}
公有(public):可以被所有类使用。
保护(protect):可以被子类和同一个包中的类使用。
静态(static):创建类变量和类方法,静态方法不能被覆盖,只是被隐藏了。
final限定符:final类不能被继承,final方法不能被子类覆盖,final变量的值不能被修改。//牺牲了灵活性,换来了效率,在该限定符修饰的方法被使用的时候,不必从下往上的查找该方法,在比那一的时候JAVA编译器就已经将可执行字节码放入到调用它的程序。
抽象(abstract):只有属性和行为而没有具体的方法
8.关于关键字this和super
在当前类的方法中引用实例变量或者是方法,使用this关键字,this是当前类的一个引用。
在子类中引用超类的方法,使用super关键字,super是超类的一个引用。
在对构造方法的引用使用this(),还有super();
如果新的方法需要扩展而不是覆盖则可通过调用关键字进行扩展。
9.方法的重载:通过相同的函数名构建函数,通过参数个数以及参数的类型进行区分。
10.方法的覆盖:是指在子类中采用同名方法覆盖掉超类的方法。
11.接口:解决单继承的问题可以被任何类继承。一个类可以继承多个接口。其接口内的方法都是被抽象和公有的。//接口是抽象类的特例?
声明新的接口使用interface,继承一个接口使用extends。
12.异常和线程
引发异常,捕获异常
Try{//可能发生异常的语句
}catch(obj//实例化可能的异常类否则用Exeption){//处理异常的具体过程
}finally{//总是执行该语句
}
抛出异常throws
创建异常类,有两个构造方法,一个不接受参数一个接受一个字符串参数。

0 0
原创粉丝点击