t.text 1.栈区、堆区、静态区通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆
1.栈区、堆区、静态区 通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通 过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放 在静态区中. String str = new String("hello"); 上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。 2.静态变量与实例变量的生命周期 静态变量是用static修饰的变量,可以通过类名直接访问,并且静态变量是放在方法区的,而实例变量不能通过类名访问, 并且实例变量存放在堆区。静态变量的生命周期由类创建而开始,类结束而销毁,实例变量的生命周期由实例变量本身决定。 3.局部变量的生命周期 局部变量位于栈区,它的生命周期由调用该局部变量的方法决定。 4.操作符==与equals()方法 ==比equals()更严谨,==除了比较引用对象是否相同外,还要对引用变量进行判断,而equals方法主要用来比较对象内容 是否相同。 5。继承extends 当父类、子类在同一个包下的时候,子类继承public、protected以及默认级别的成员变量和成员方法。当父类、子类不在同 一个包下的时候,子类继承父类public以及protected两个级别的方法和变量。 一个类只能继承一个直接父类,但可以有多个间接父类。 6.方法重载和方法覆盖 方法重载:方法名相同,但是参数不同,是编译时的多肽 方法覆盖:主要是建立在父类和子类之间,子类重写父类的方法,通常是方法名、参数、返回类型都必须相同 7.多肽 多肽中绑定规则:静态方法与引用变量声明的类型静态绑定,成员变量与引用变量声明的类型静态绑定,实例方法与引用变量 的对象动态绑定。例子: Base who=new Sub(); 其中Base表示引用类型,Sub表示对象。 8.继承的利弊 继承提高了代码的重用性,定义了下层能够拥有的属性和方法 继承的弊处是打破了封装 9.接口 接口和抽象类都不能被实例化,接口中只是声明方法但不包含具体的实现细节,接口不能实现另一个接口但是能继承多个接口, 要实现接口通过implements来进行,一个类实现其接口时必须实现接口中的抽象方法,一个类可以实现多个接口。 10.类的生命周期 类的生命周期从类被加载、连接、初始化、卸载结束。 11.对象的生命周期 对象的创建有四种方法:通过new来创建、通过序列化和反序列化、通过反射机制、通过对象的clone方法。 12.多线程 进程是指运行中的应用程序,每个进程有自己独立的内存空间,每次执行一个java.exe就表示进程去解析JAVA程序代码。 线程是指进程中的一个执行流程,进程可以由线程组成,一个进程中可以同时运行多个不同的线程。 线程与进程的区别:进程需要操作系统为其分配内存空间,而同一进程中所有线程可以共用一个进程的内存空间,线程可以 共享一个内存和资源。 线程的创建方法:创建线程有两种方式:通过实现Thread类,通过实现Runnable接口。 1.Thread类:通过extends来继承Thread类,然后执行Run方法,之后通过start方法开始子线程。 2.实现Runnable接口:通过implements来实现,执行Run方法,通过start方法开始子线程 线程让步:sleep()和yield() sleep方法不考虑优先级而yield只会把CPU转给比自己优先级相等或高的线程 13.数组 int []a=new int [1]; 排序:冒泡排序:值较小的数据向数组顶部冒出,值较大的数据向数组的底部。 for(int i=0;i array[j+1]){ int temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } } } 二叉查找:通过比较数组的一半进行比较 int low=0; int high=array.length-1; int middle; while(low