Java_Notes01
【1】数据类型划分:
a.基本数据类型:boolean,tyte,char,short,int,long,float,double
b.引用数据类型:它以一种特殊的方式指向变量的实体(类似于指针)这类变量在声明时不会分配内存,必须另外进行开辟内存空间的操作。---类,接口,数组
c.当声明一个数组时,编译器仅会在栈内存分配一块空间给它,用来保存指向数组实体的地址的名称---数组变量所保存的并非是数组的实体,而是数组堆内存的参考地址
声明之后,接着要做的就是做堆内存分配的操作。数组操作中,在栈内保存的永远是数组的名称,只开辟了栈内存空间的数组是永远无法使用的,必须有指向堆内存才可以使用,这就需要使用new关键字。然后只是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向。类似于一个人拥有多个名字。
【2】短路与(或)和非短路与(或)
a.对于短路与,第一个条件为faulse,则后面的条件将不再判断---&&
b.对于短路或,第一个条件为true,则后面的条件将不再判断---||
【3】位运算符
a.&按位与 |按位或 ^异或:相同为0.不同为1 ~取反 <<左移位 >>右移位 >>>无符号右移位
【4】continue
a.当程序执行到continue时,就会回到循环的起点,继续执行循环主体的部分语句
【5】命名规范
a.类:每个单词首字母大写
b.方法:第一个单词首字母小写,别的首字母大写
【6】方法重载
a.重载就是方法名称相同,但是参数的类型和参数的个数不同。通过传递参数的额个数和类型不同可以完成不同功能的方法的调用。类似的println()也属于重载
【7】java新特性---foreach输出
a.数组的输出一般都是会使用for循环,但是新提供了一种foreach语法,格式:for(datatype dataname : arrayname){}
【8】面向对象:封装,继承,多态
a.封装性
1.第一层含义:指把对象的属性和行为看成一个密不可分的整体,将两者封装在一个不可分割的独立单位(即对象)中;
2.第二层含义:指信息隐蔽,把不需要让外界知道的信息隐藏起来,有些对象的属性和行为允许外界用户知道或使用,但是不允许更改;而另一些属性和行为,则不允许外界知道,或只是允许使用对象的功能,而尽可能隐藏对象的功能实现细节。
b.继承性
1.java不支持多继承,但是可以通过interface的方式来弥补由于不支持多继承而带来的子类不能享用多个父类的缺点。
c.多态性;方法覆盖称为动态多态,是一个运行时问题;方法重载称为静态多态, 是一个编译时问题
1.方法重载:在一个类里,允许多个方法使用同一个名字,但是参数不同,完成的功能也不同
2.对象多态:子类对象可以与父类对象经行相互转换,而且根据其使用的子类的不同,完成的功能也不同。接口的多种不同的实现方式也是多态。
【9】对象也是引用:所有的对象名称都在栈内存中保存,而对象的具体内容则保存在对应的堆内存中,必须使用new关键字才能开辟堆内存空间。栈中存放的是堆空间的地址。
【10】构造方法:默认是public Person(){}
【11】匿名对象:没有明确给出名字的对象,一般只使用一次,之后就被垃圾收集掉。而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。new Person("aa",11)
【12】String对象的内容不可以修改,一个String对象内容的改变实际上是通过内存地址的“断开-连接”变化完成的,而本身字符串中的内容并没有任何的变化。
【13】引用传递:指将堆内存空间的使用权交给多个栈内存空间
【14】this:
1.使用this强调本类中的方法
2.表示类中的属性
3.可以使用this调用本类的构造方法
4.this表示当前对象:指当前正在调用类中方法的对象
【15】static:
1.使用static声明属性,则此属性称为全局(静态)属性。使用它声明的属性是所有对象共享的。static是不能调用任何非static内容的
2.使用static声明的方法:可以由类名称直接调用。静态方法是不可以调用非静态方法的。
3.静态代码块:静态代码块优先于主方法执行,而在类中定义的静态代码块会优先于构造块执行,而且不管有多少个对象产生,静态代码块只执行一次。
【16】java常用的内存区域:
1.栈内存空间:保存所有的对象名称(保存引用的堆内存空间的地址)
2.堆内存空间:保存每一个对象的具体属性内容
3.全局数据区:保存static类型的属性
4.全局代码区:保存所有的方法定义
【17】单例设计模式:static类型的属性可以由类名称直接调用
public class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
private Singleton() {
}
public void print() {
System.out.println("Hello");
}
}
【18】对象数组:因为是引用数据类型,所以数组中的每一个对象都是null,在使用时数组中的每一个对象必须分别进行实例化操作
【19】内部类:内部类破坏了类的基本结构,但是它唯一的好处就是---可以方便地访问外部类的私有属性
public class Outer {
private String info = "Hello World";
class Inner{
public void print(){
System.out.println(info);
}
};
public void fun(){
new Inner().print();
}
}
一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,调用的基本格式:
Outer out = new Outer();
Outer.Inner in = out.new Inner();
在方法中定义内部类,如果方法中的参数要想被内部类所访问,则参数前必须加上final关键字
【20】继承:子类对象在实例化之前必须先调用父类的构造方法后再调用自己的构造方法
子类覆写的方法不能拥有比父类方法更加严格的访问权限
【21】final关键字:1.使用final声明的类不能有子类
2.使用final声明的方法不能被子类所覆写
3.使用final关键字的变量即成为常量,不可修改
【22】抽象类:抽象类的作用类似于“模板”,目的是要设计者依据它的格式来修改并创建新的抽象类。但是并不能由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。
规则:1.包含一个抽象方法的类必须是抽象类
2.抽象类和抽象方法都必须使用abstract关键字声明
3.抽象方法只需要声明不需要实现
4.抽象类必须被子继承,子类必须覆写抽象类中的全部抽象方法
抽象类就是比普通的类多定义了一个抽象方法,除了不能直接进行对象的实例化操作之外并没有任何不同
【23】接口:由 全局常量+公共的抽象方法组成(接口中的抽象方法必须定义为public,不写默认也是一样)一种特殊的类
public static final String xxx; ---String xxx;
public static void xxx(); ---void xxx();
【24】多态性:1.方法的重载和覆写
2.对象的多态性:
向上转型:子类对象->父类对象 B b=new B(); A a=b; a.fun1();
向下转型:父类对象->子类对象 A a=new B(); B b=(B)a; b.fun1();
在进行对象的向下转型前,必须首先发生对象的向上转型,也就是先由子类去实例化父类对象,这时父类知道有这么一个子类,再向下转型就没问题
【24】instanceof关键字:使用它可以判断一个对象到底是哪个类的实例 :
a instanceof A——》放回boolean类型(true/faulse)它可以使用在对象转型时,避免类型转换异常的出现