当前位置:文档之家› java基础知识点总结

java基础知识点总结

java基础知识点总结
java基础知识点总结

Created by AIwen on 2017/5/14.

java是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,java程序使用类的构造器来创建该类的对象。

java也支持面向对象的三大特征:封装、继承、和多态。java提供了private、protected、和public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和和方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。

面向对象的程序设计过程中有两个重要的概念:类(Class)和对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、和方法。

构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。

构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。

构造器修饰符:可以是public、protected、private其中之一,或者省略构造器名:构造器名必须和类名相同。

注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再是构造器。

实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值是隐式的。

java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。

成员变量:

成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再和后面的修饰符组合起来修饰成员变量,也可省略。

成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。

类型:可以是java语言允许的任何数据类型,包括基本类型和引用类型。

成员方法:

方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static和final最多只能出现其中的一个,和abstract组合起来使用。也可省略。

返回值类型:可以是java语言的允许的任何数据类型,包括基本类型和引用类型。

方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。

方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执行。

static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而

不属于该类的单个实例,因此通过把static修饰的成员变量和方法被称为类变量、类方法(静态成员变量,静态成员方法);不使用static修饰的成员变量和方法称为实例变量和实例方法(非静态成员变量,非静态成员方法)。静态成员不能直接访问非静态成员。

static的真正作用就是用于区分成员变量、方法、内部类、初始化块,这四种成员到底属于类本身还是属于实例。

有static修饰的成员属于类本身,没有类修饰的成员属于该类的实例。

java类大致有如下作用:

定义变量

创建对象

调用类的类方法或访问类的类变量。

定义一个类就是为了重复创建该类的实例,同一个类的多个实例具有相同的特征,而类则是定义了多个实例的共同特征。

类里定义的方法和成员变量都可以通过类或实例来调用。Static修饰的方法和成员变量,既可通过类来调用,也可

通过实例来调用;没有使用static修饰的普通方法成员变量,只可通过实例来调用。

Person p=new Person();这行代码创建了一个Person实例,也被称为Person对象,这个Person对象被赋给p变量。在这行代码中实际上产生了两个东西,一个是p变量,一个是Person对象。P引用变量本身只存储了一个地址值,并未包含任何实际数据,但它指向实际的Person对象。

Person对象由多块内存组成,不同内存块分别存储了Person对象的不同成员变量。类是一种引用数据类型,因此程序中定义的Person类型的变量实际上是一个引用,它被存放在栈内存里,指向实际的Person对象;而真正的Person 对象则存放在堆内存中。

当一个对象被创建成功以后,这个对象将保存在堆内存中,java程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。堆内存里的对象可以有多个引用,即多个引用变量指向同一个对象。

如果堆内存里的对象没有任何变量指向该对象,那么程序将无法再访问该对象,这个对象也就变成了垃圾,java垃圾回收机制将回收该对象,释放该对象所占的内存区。

对象的this引用

Java提供了一个this关键字,this关键字总是指向调用该方法的对象。This作为对象的默认引用有两种情形:

构造器中引用该构造器正在初始化的对象;在方法中引用调用该方法的对象。

This关键字最大的作用就是让类中一个方法,访问该类里的另一个方法或者实例变量。

Java允许对象的一个成员直接调用另一个成员,可以省略this 前缀。

如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象,所以,static修饰的方法中不能使用this引用。

Java编程时不要使用对象去调用static修饰的成员变量、方法、而是应该使用类去调用static修饰的成员变量、方法。

如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。

大部分的时候,普通方法访问其他方法、成员变量时无须使用this前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用this前缀。

This引用也可以用于构造器中作为默认引用,由于构造器时直接使用new关键字来调用,而不是使用对象来调用的,所以this在构造器中代表该构造器正在初始化对象。

方法:

Java里的方法不能独立存在,所有的方法都必须定义在类里。如果这个方法是用来static修饰,则这个方法属于这个类,否则这个方法属于这个类的实例。执行方法时,必须使用类或者对象作为调用者。同一个类的一个方法调用另外一个方法时,如果被调方法是普通方法,则默认使用this作为调用者;如果被调用方法是静态方法,则默认使用类

作为调用者。也就是说java中看起来某些方法可以被独立执行,但实际上还是使用this或者类来作为调用者。

Java里方法参数传递方式只有一种:值传递。所谓值传递,就是讲实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。

从JDK1.5之后,java允许定义形参个数可变的参数,从而允许为方法指定数量不确定的形参。如果在定义方法时,在最后一个形参的类型后增加三点(…),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。

长度可变的形参。

方法重载:

Java允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法的重载。

Java程序确定一个方法需要三个要素:调用者;方法名;形参列表。

Java中变量分为:成员变量和局部变量。成员变量被分为类变量和实例变量两种,定义成员变量时没有static修饰的就是实例变量,有static修饰的就是类变量。

●变量的命名:从程序的可读性角度来看,应该是多个有意义的单词连缀而成,其中第一个单词首字母小写,后面

每个单词首字母大写。

●如果通过一个实例修改了类变量的值,由于这个类变量并不属于它,而是属于它对应的类。因此,修改的依然是

类变量,与通过该类来修改类变量的结果完全相同,这会导致该类的其他实例来访问这个类变量时也将获得这个被修改过的值。

●成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的初始化阶段或创建该类

的实例时,进行默认初始化。

●实例变量随实例的存在而存在,而类变量则随类的存在而存在。实例也可访问类变量,同一个类的所有实例访问

类变量时,实际上访问的是该类本身的同一个变量,也就是说,访问了同一片内存区。

●局部变量根据定义形式的不同,又可分为三种形式:形参,方法局部变量,代码块局部变量;局部变量除了形参

之外,都必须显示初始化。

●在同一个类里,成员变量的作用范围是整个类内有效,一个类里不能定义两个同名的成员变量,即使一个是类变

量,一个是实例变量也不行;一个方法里不能定义两个同名的方法局部变量,方法局部变量与形参也不能同名;

同一个方法中不同代码块内局部变量可以同名;如果先定义代码块局部变量,后定义方法局部变量,前面定义的代码块局部变量与后面定义的方法局部变量也可同名.

●Java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需

要在这个方法里引用被覆盖的成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量。

public class VariableOverrideTest {

//定义一个name实例变量

private String name="李刚";

//定义一个price类变量

private static double price=78.0;

public static void main(String[] args){

//方法里局部变量覆盖成员变量,将输出price的局部变量65

int price=65;

System.out.println(price);

//使用类名作为price变量的限定,将输出price类变量的值

System.out.println(VariableOverrideTest.price);

new VariableOverrideTest().info();

}

public void info(){

//方法里的局部变量,局部变量覆盖成员变量,输出name局部变量的值:孙悟空

String name="孙悟空";

System.out.println(name);

//将输出name实例的值:李刚

System.out.println(https://www.doczj.com/doc/132976307.html,);

}

}

当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。

Person p1=new Person();时,如果这行代码是第一次使用Person类,则系统通常会在第一次使用Person类时加载这个类,并初始化这个类。

局部变量定以后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化。局部变量不属于任何类或者实例,因此它总是保存在其所在方法的栈内存中。如果局部变量时基本类型的变量,则直接把这个变量的值保存在该变量对应的内存中;如果局部变量是一个引用类型的变量,则这个变量里存放的是地址,通过该地址引用到该变量实际引用的对象或者数组。

栈内存中的变量无须系统垃圾回收,往往随是方法或代码块的运行结束而结束。

如果定义的某个变量是用于描述某个类或某个对象的固有信息的,这种变量应该定义成成员变量。如果这种信息对这个类的所有实例完全相同,或者说它是类相关的,则该定义成类变量;如果这个信息是实例相关的,则应该定义成实例变量。

用于保存某个类或某个实例状态信息的变量通常应该使用成员变量。如果某个信息需要在某个类的多个方法之间进行共享,则这个信息应该使用成员变量来保存。

隐藏和封装

访问控制符用于控制一个类的成员是否可以被其他类访问。

Java提供了3个访问控制修饰符:private,protected,和public,还有一个默认访问控制修饰符default

Private(当前类访问权限);default(包访问权限);protected(子类访问权限):如果一个成员使用protected访问修饰符修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中子类访问。通常情况下,使用protected修饰的方法,通常希望其子类来重写这个方法。Public(公共访问权限)

对于局部变量而言,其作用域就是它所在的方法,不可能被其他类访问,因此不能使用访问控制符来修饰。

外部类只能有两种访问控制级别:public和默认,不能使用private和protected

public class Person {

private String name;

private int age;

public void setName(String name){

if(name.length()>6||name.length()<2){

System.out.println("error");

return;

}

else{

https://www.doczj.com/doc/132976307.html,=name;

}

}

public String getName(){

return https://www.doczj.com/doc/132976307.html,;

}

public void setAge(int age) {

if (age > 100 || age < 0) {

System.out.println("error");

} else {

this.age = age;

}

}

public int getAge(){

return this.age;

构造器:

构造器最大的用途是创建对象时执行初始化。当创建一个对象时,系统为这个对象的实例变量进行默认初始化,这种默认的初始化把所有基本类型的实例变量设为0(对数值型实例变量)或false(对布尔型实例变量),把所有引用类型的实例变量设为null。如果想改变这种默认的初始化,想让系统创建对象时就位该对象的实例变量显式指定初始值,就可以通过构造器来实现。

因为构造器主要用于被其他方法调用,用以返回该类的实例,因而通常把构造器设置成public访问权限,从而允许系统中任何位置的类来创建该类的对象。如果设置成protected,主要用于被子类调用;设置为private,阻止其他类创建该类的实例。

如果系统中包含了多个构造器,其中一个构造器B的执行体里完全包含另一个构造器A的执行体。为了这构造器B中

使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句。使用this调用重载的构造器时,系统会根据this后括号里的实参来调用形参列表与之对应的构造器

类的继承:

Java继承通过extends关键字来实现实现继承的类被称为子类,被继承的类被称为父类,有的也称为基类、超类。因为子类是一种特殊的父类,因此父类包含的范围总比子类包含的范围要大。

Java子类不能获得父类的构造器

重写父类方法:

子类扩展了父类,子类是一个特殊的父类。大部分时候,子类总是以父类为基础,额外增加新的成员变量和方法。但有一种情况例外:子类需要重写父类方法。

public class Bird {

//Bird类的fly()方法

public void fly(){

System.out.println("我在天空中飞");

}

}

public class Ostrich extends Bird {

//重写Bird类的fly()方法

public void fly(){

System.out.println("我在陆地上飞");

}

public static void main(String[] args){

//创建Ostrich对象

Ostrich or=new Ostrich();

//执行Ostrich对象的fly()方法,将输出“我在陆地上飞”

or.fly();

}

}

这种子类包含与父类同名方法的现象被称为方法重写(Override),也被称为方法覆盖。可以说子类重写了父类的方法,也可以说子类覆盖了父类的方法。

方法的重写要遵循“两同两小一大”规则,“两同”即方法名相同、形参列表相同;“两小”指的是子类方法的返回值

类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类声明抛出的异常类更小或相等;“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。

覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法。

当子类覆盖了父类方法后,子类的对象将无法访问父类中被覆盖的方法,但可以在子类方法中调用被覆盖的方法。如果需要在子类方法中调用父类中被覆盖的方法,则可以使用super(被覆盖的是实例方法)或者父类类名(被覆盖的是类方法)作为调用者来调用父类中被覆盖的方法。

如果父类方法具有private访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法,也就是无法重写该方法。

重载只要发生在同个类多个同名方法之间,而重写发生在子类和父类同名方法之间。父类方法和子类方法之间也可能发生重载。

Super限定:

Super是Java提供的一个关键字,super用于限定该对象调用它从父类继承得到的实例变量或方法。Super不能出现在static修饰的方法中。Static修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象,因而super限定就失去了意义。

如果在构造器中使用super,则super用于限定该构造器初始化的是该对象从父类继承得到的实例变量,而不是该类自己定义的实例变量。

如果子类定义了和父类同名的实例变量,则会发生子类实例变量隐藏父类实例变量的情形。在正常情况下,子类里定义的方法直接访问该实例变量,默认会访问到子类中定义的实例变量,无法访问到父类中被隐藏的实例变量。在子类

如果在某个方法中访问名为a的成员变量,但没有显式指定调用者,则系统查找a的顺序为:

1.查找该方法中是否有名为a的局部变量

2.查找当前类中是否包含名为a的成员变量

3.查找a的直接父类中是否包含名为a的成员变量,一次上溯a的所有父类,直到https://www.doczj.com/doc/132976307.html,ng.Object类,如果最终

不能找到名为a的成员变量,则系统出现编译错误。

如果被覆盖的是类变量,在子类的方法中则可以通过父类名作为调用者来访问被覆盖的类变量

当程序创建一个子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为它从父类继承得到的所有实例变量分配内存,即使子类定义了与父类中同名的实例变量。

如果在子类里定义了与父类中已有变量同名的变量,那么子类中定义的变量会隐藏父类中定义的变量。注意不是完全

调用父类构造器:

子类不会获得父类的构造器,但子类构造器里可以调用父类构造器的初始化代码。在一个构造器里调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类构造器使用super调用来完成。

public class Base {

public double size;

public String name;

public Base(double size,String name){

this.size=size;

https://www.doczj.com/doc/132976307.html,=name;

}

}

public class Sub extends Base{

public String color;

public Sub(double size,String name,String color){

//通过super调用父类构造器的初始化过程

super(size,name);

this.color=color;

}

public static void main(String[] args){

Sub s=new Sub(5.6,"测试","red");

System.out.println(s.size+","+https://www.doczj.com/doc/132976307.html,+","+s.color);

}

}

Super调用的是其父类的构造器,而this调用的是同一个类中重载的构造器;因此,使用super调用父类的构造器也必须出现在子类构造器执行体的第一行,所以this调用和super调用不会同时出现。

当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行;不仅如此,执行父类构造器时,系统会再次上溯执行其父类的构造器……依次类推,创建任何java对象,最先执行的总是https://www.doczj.com/doc/132976307.html,ng.Object类的构造器。

public class Creature {

public Creature(){

System.out.println("无参");

}

}

public class Animal extends Creature {

public Animal(String name){

System.out.println("Animal带一个参数的构造器"+name);

}

public Animal(String name,int age){

//this调用同一个重载构造器

this(name);

System.out.println("Animal带两个参数的构造器"+age);

}

}

public class Wolf extends Animal {

public Wolf(){

super("灰太狼",4);

System.out.println("wolf无参构造器");

}

public static void main(String[] args){

Wolf wf=new Wolf();

//虽然main方法只创建了一个Wolf对象,但系统在底层完成了复杂的操作,运行将会得到

// 无参

// Animal带一个参数的构造器灰太狼

// Animal带两个参数的构造器4

// wolf无参构造器

}

}

创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。如果某个父类通过this调用了同类中重载的构造器,就会依次执行此父类的多个构造器。

4.7多态:

Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。

public class SubClass extends BaseClass {

//重写定义一个book实例变量隐藏父类的book实例变量

public String book="abc";

public void test(){

System.out.println("子类的覆盖父类的方法");

}

public void sub(){

System.out.println("子类的普通方法");

}

public static void main(String[] args){

//编译时类型和运行时类型完全一样,因此不存在多态

BaseClass bc=new BaseClass();

//输出父类bc对象的成员变量值:6

System.out.println(bc.book);

bc.test();

bc.base();

//编译时类型和运行时类型完全一样,因此不存在多态

SubClass sbc=new SubClass();

//输出子类对象sbc的成员变量值:abc

System.out.println(sbc.book);

sbc.test();

sbc.sub();

//下面调用将执行从父类继承到的base()方法

sbc.base();

//编译时类型和运行时类型不一样,发生多态发生

BaseClass ployBc=new SubClass();

//访问的是父类对象的实例变量

System.out.println(ployBc.book);

//执行从父类继承到的base()方法

ployBc.base();

//调用将执行当前类的test()方法

ployBc.test();

// ployBc.sub(); 因为编译时类型是BaseClass,没有提供sub()方法,所以编译会出现错误}

}

因为子类是一种特殊的父类,因此java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者被称为向上转型,向上转型由系统自动完全。

对象的实例变量不具备多态性。

注:

引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此在编写Java代码时,引用变量只能调用声明该变量时所用类里包含的方法。例如:Object p=new Person()代码定义了一个变量P,则这个P只能调用Object类的方法,而不能调用Person类里的方法。

如果需要让这个引用变量调用它运行时类型的方法,则必须把它强制类型转化成运行时的类型,强制类型转换符需要借助于类型转换运算符,用法是(type)variable

强制类型转换需要注意:

基本类型之间的转换只能在数值类型之间进行,这里所说的数值类型包括,整数型、字符型和浮点型;但数值类型和布尔类型之间不能进行类型转换。

引用类型之间的转换只能在具有继承关系的两个类型之间进行,如果是两个没有任何继承关系的类型,则无法进行类

型转换。

考虑到强制类型转换时可能出现异常,因此进行类型转换之前应先通过instanceof运算符来判断是否可以成功转换。

注意:

当把子类对象赋给父类引用变量时,被称为向上转型,这种转型总是可以成功的,这也从另一个侧面证实了子类是一种特殊的父类。这种转型只是表明这个引用变量的编译时类型是父类,但实际执行它的方法时,依然表现出子类对象行为方式。但把一个父类对象赋给子类引用变量时,就需要进行强制类型转换,而且还可能在运行时产生ClassCastException异常,使用instanceof运算符可以让强制类型转换更安全。

Instanceof运算符:

Instanceof运算符前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是接口),它用于判断前面的对象是否是后面的类,或者其子类、实现的实例。如果是,则返回ture,否则返回false.

在使用instanceof运算符时需要注意:instanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。

public class instanceofTest {

public static void main(String[] args){

//声明hello时使用Object类,则hello的编译类型是Object

//Object是所有类的父类,但hello变量的实际类型是String

Object hello="hello";

System.out.println((hello instanceof Object));

//String和Object类存在继承关系,可以进行instanceof运算,返回true

System.out.println((hello instanceof String));

//Math和Object类存在继承关系,可以进行instanceof运算,返回false

System.out.println((hello instanceof Math));

//String 实现了Comparabel接口,所以返回true

System.out.println((hello instanceof Comparable));

String a="hello";

//String类和Math类没有继承关系,所以下面的代码编译无法通过

// System.out.println((a instanceof Math));

}

}

4.8初始化块:

初始化块是一段固定执行的代码,它不能接受任何参数。因此初始化块对同一个类的所有对象所进行的的初始化处理完全相同。如果两个构造器中有相容的初始化代码,且这些初始化代码无须接收参数,就可以把它们放在初始化块中定义。

当创建java对象时,系统总是先调用该类里定义的初始化块,相同类型的初始化块之间按顺序执行。初始化块在执行构造器之前执行。

与构造器类型,创建一个java对象时,不仅会执行该类的普通初始化块和构造器,而且系统会一直上溯到https://www.doczj.com/doc/132976307.html,ng.Object类,先执行https://www.doczj.com/doc/132976307.html,ng.Object类的初始化块,再开始执行https://www.doczj.com/doc/132976307.html,ng.Object的构造器,依次向下执行其子类的初始化块,再开始执行其子类的构造器…最后才执行该类的初始化块和构造器,返回该类的对象。

静态初始化块:

如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象执行初始化,类初始化块则负责对类进行初始化)。静态初始化块总是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。因此静态初始化块总是比普通初始化块先执行。

通常静态初始化块用于对类变量执行初始化处理。

与普通初始化块类型,系统在类初始化阶段执行静态初始化块时,不仅会执行本类的静态初始化块,而且还会一直上溯到https://www.doczj.com/doc/132976307.html,ng.Object类,从最高父类开始一直到本类结束,依次执行每个类中的静态初始化块。

public class Test {

public static void main(String[] args){

new Leaf();

new Leaf();

}

}

class Root{

static{

System.out.println("Root的静态初始化块");

}

{

System.out.println("Root的初始化块");

}

public Root(){

System.out.println("Root 的无参构造器");

}

}

class Mid extends Root{

static{

System.out.println("Mid的静态初始化块");

}

{

System.out.println("Mid的初始化块");

}

public Mid(){

System.out.println("Mid的无参构造器");

}

public Mid(String msg){

//通过this调用同一类中重载的构造器

this();

System.out.println("Mid的带有参数的构造器");

}

}

class Leaf extends Mid{

static{

System.out.println("Leaf的静态初始化块");

}

{

System.out.println("Leaf的初始化块");

}

public Leaf(){

super("abc");

System.out.println("执行Leaf的构造器");

}

}

类初始化阶段,先执行最顶层父类的静态初始化块,然后依次向下,直到执行当前类的初始化块。

对象初始化阶段,先执行最顶层父类的初始化块、最顶层父类的构造器,然后依次向下,直到执行当前类的初始化块、当前类的构造器

Java系统加载并初始化某个类时,总是保证该类的所有父类(包括直接父类和间接父类)全部加载并进行初始化。静态初始化块和静态成员变量的执行顺序与在源程序中排列顺序相同。

第五章面向对象下

5.1 java增强的包装类

为了解决8种基本类型的变量不能当成Object类型变量使用的问题,java提供了包装类的概念。

除了int和char有点例外,其他的基本数据类型对应的包装类都是将其首字母大写即可。

自动装箱和自动拆箱用法:

1)利用包装类提供的parseXxx(String s)静态方法

2)利用包装类提供的Xxx(String s)构造器

String 类提供了多个重载的valueOf()方法,用于将基本类型变量转换成字符串。

public class Primitive2String {

public static void main(String[] args){

String intStr="123";

//把一个特定的字符串转换成int变量

int it1=Integer.parseInt(intStr);

int it2=new Integer(intStr);

System.out.println(it2);

String floatStr="4.56";

//把一个特定的字符串转换成float变量

float ft1=Float.parseFloat(floatStr);

float ft2=new Float(floatStr);

//把一个float变量转换成String 变量

String ftStr=String.valueOf(2.345f);

System.out.println(ftStr);

//把一个double变量转换成String变量

String dbStr=String.valueOf(3.344);

System.out.println(dbStr);

//把一个boolean变量转换成String变量

String boolStr=String.valueOf(true);

System.out.println(boolStr.toUpperCase());

}

}

如果希望把基本类型变量转换成字符串,还有一种更简单的方法:将基本类型变量和””进行连接运算,系统会自动把基本类型变量转换成字符串。

虽然包装类型的变量时引用数据类型,但包装类的实例可以与数值类型的值进行比较,这种比较是直接取出包装类实

系统把一个-128-127之间的证书自动装箱成Integer实例,并放入了一个名为cache的数组中缓存起来。如果以后把一个-128-127之间的整数自动装箱成一个Integer实例时,实际上是直接指向对应的数组元素,因此-128-127之间的同一个整数自动装箱成Integer实例时,永远都是引用cache数组的同一个数组元素,所以它们都相等。但如果整数

5.2 处理对象

对象打印的误区:

重写toString()方法,通过重写,就可以让系统在打印Apple对象时打印该对象的“自我描述”内容public class ToStringTest {

public static void main(String[] args){

Apple a=new Apple("red",100);

//打印Apple对象

System.out.println(a);

}

}

class Apple{

private String color;

private double weight;

//提供有参数的构造器

public Apple(String color,double weight){

this.color=color;

this.weight=weight;

}

public String getColor(){

return color;

}

public void setColor(String color){

this.color=color;

}

public double getWeight(){

return weight;

}

public void setWeigth(double weigth){

this.weight=weight;

}

5.2.2 ==和equals方法

Java中测试两个变量是否相等有两种方式,一种是利用==运算符,一种是利用equals()方法。当使用==来判断两个变量是否相等时,如果两个变量是基本类型变量,且都是数值类型(不一定要求数据类型严格相同),则只要两个变量的值相等,就将返回true.

对于两个引用类型变量,只有他们指向同一个对象时,==判断才会返回true。==不可用于比较类型上没有父子关系的

当Java程序直接使用形如”hello”的字符串直接量(包括可以在编译时就计算出来的字符串值)时,JVM将会使用常量池来管理这些字符串;当使用new String("hello”)时,JVM会先使用常量池来管理“hello”直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象被保存在堆内存中。换句话说,new String

JVM常量池保证相同的字符串直接量只有一个,不会产生多个副本。

String已经重写了Object的equals()方法,String的equals()方法判断两个字符串相等的标准是:只要两个字符串所包含的字符序列相同,通过equals()比较将返回true,否则返回false

类成员不能访问实例成员

如果一个类始终只能创建一个实例,则这个类被称为单例类

public class SingletonTest {

public static void main(String[] args){

//创建Singleton对象不能通过构造器,只能通过getInstance方法得到实例

Singleton s1=Singleton.getInstance();

Singleton s2=Singleton.getInstance();

System.out.println(s1==s2);

}

}

class Singleton{

//使用一个类变量来缓存曾经创建的实例

private static Singleton instance;

//对构造器使用private修饰,隐藏该构造器

private Singleton(){}

//提供一个静态方法,用于返回Singleton实例

//该方法可以加入自定义控制,保证只产生一个Singleton对象

public static Singleton getInstance(){

//如果Instance为Null,,则表明还不曾创建singleton对象

//如果intstance不为null,则表明已经创建了Singleton对象,将不会重新创建新的实例if(instance==null){

instance=new Singleton();

}

return instance;

}

5.4 final修饰符

Final修饰的变量不可被改变,一旦获得了初始值,该final变量的值就不能被重新赋值。因此java语法规定:final 修饰的成员变量必须由程序员显式的指定初始值。

Final修饰的类变量、实例变量能指定初始值的地方如下:

类变量:必须在静态初始化块中指定初始值或声明该类型变量时指定初始值,而且只能在两个地方的其中之一指定实例变量:必须在非静态初始化块、声明该实例变量或构造器中指定初始值,而且只能在三个地方的其中之一指定。实例变量不能在静态初始化块中指定初始值,因为静态初始化块时静态成员,不可访问实例变量——非静态成员;类变量不能在普通初始化块中指定初始值,因为类变量在类初始化阶段已经被初始化了,普通初始化块不能对其重新赋

final int a=6;

//下面这三个变量将在构造器或初始化块中指定初始值

final String str;

final int c;

final static double d;

//ch 既没有指定默认值,有没有在初始化块、构造器中指定初始值

// final char ch;

//初始化块,对没有指定默认值的实例变量指定初始值

{

//在初始化块中为实例变量指定初始值,合法

str="hello";

//定义a实例变量时,已经指定了默认值,不能重新为a赋值

// a=9;

}

static{

//在静态初始化块中为类变量指定初始值,合法

d=5.6;

}

public FinalVariableTest(){

//str在初始化块中已定义初始值,不可重新赋值

// str="java";

//构造器,可对既没有指定默认值,又没有在初始化块中指定初始值的实例变量指定初始值c=5;

}

public void changeFinal(){

//普通方法不能为final修饰的成员变量赋值

// d=1.2;

//不能在普通方法中为final成员变量指定初始值

// ch='a';

}

public static void main(String[] args){

FinalVariableTest ft=new FinalVariableTest();

System.out.println(ft.a);

System.out.println(ft.c);

System.out.println(ft.d);

}

}

Final局部变量

系统不会对局部变量进行初始化,局部变量必须由程序员显式初始化。因此final修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。如果final修饰的局部变量在定义时没有指定默认值,则可以在后面代码中对该final变量赋初始值,但只能一次,不能重复赋值。

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本列表变量不能改变。但对于引用类型变量而言,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变。

//final修饰数组变量,iArr是一个引用变量

final int[] iArr={5,6,12,9};

System.out.println(Arrays.toString(iArr));

//对数组元素排序,合法

Arrays.sort(iArr);

System.out.println(Arrays.toString(iArr));

//对数组元素赋值,合法

iArr[2]=-8;

System.out.println(Arrays.toString(iArr));

//对iArr重新赋值,非法

// iArr=null;

//final修饰Person变量,p是一个引用变量

final Person p=new Person(45);

//改变p对象的age实例变量,合法

p.setAge(23);

System.out.println(p.getAge());

//对p重新赋值,非法

// p=null;

}

}

class Person{

private int age;

public Person(){}

//有参数的构造器

public Person(int age){

this.age=age;

}

public void setAge(int age){

this.age=age;

}

public int getAge(){

return age;

}

}

可执行“宏替换”的final变量

对于一个final变量来说,不管它是类变量、实例变量,还是局部变量,只要该变量满足三个条件,这个final变量就不再是一个变量,而是相当于一个直接量

1)使用final修饰符修饰

2)在定义该final变量时指定了初始值

3)该初始值可以在编译时就被确定下来

如果被赋的表达式只是基本的算术表达式或字符串连接运算,没有访问普通变量,调用方法,java编译器同样会将这种final变量当成“宏变量”处理。

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

java知识点总结

https://www.doczj.com/doc/132976307.html,ng.Object 类,是所有类的根父类! 2.Object类仅有一个空参的构造器public Object(){ } 3.关于方法: ①equals(Object obj) public boolean equals(Object obj) { return (this == obj); } // == // 1.基本数据类型:根据基本数据类型的值判断是否相等。相等返回true,反之返回false // 注:两端数据类型可以不同,在不同的情况下,也可以返回true。 // 2.引用数据类型:比较引用类型变量的地址值是否相等。 //equals(): >①只能处理引用类型变量②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等 >像String 包装类File类Date类这些重写Object类的equals()方法,比较是两个对象的 //"实体内容"是否完全相同。 >若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就需要重写Object类的 equals(Object obj)方法 ②toString()方法

当我们输出一个对象的引用时,会调用toString()方法。 1.public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 当我们没有重写Object类的toString()方法时,打印的就是对象所在的类,以及对象实体在堆空间的位置 2.一般我们需要重写Object类的toString()方法,将此对象的各个属性值返回。 3.像String类、Date、File类、包装类都重写了toString()方法。 1. String类:不可变的字符序列(如:String str = "atguigu"; str += "javaEE") 1.关注于String常用的方法! 2.String类与基本数据类型、包装类;与字符数组、字节数组; * 1.字符串与基本数据类型、包装类之间转换 * ①字符串--->基本数据类型、包装类:调用相应的包装类的parseXxx(String str); * ①基本数据类型、包装类--->字符串:调用字符串的重载的valueOf()方法 *

java基础知识点总结

Created by AIwen on 2017/5/14. java是面向对象的程序设计语言;类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将会引用到类的对象。类用于描述客观世界里某一类对象的共同特征,而对象则是类的具体存在,java程序使用类的构造器来创建该类的对象。 java也支持面向对象的三大特征:封装、继承、和多态。java提供了private、protected、和public三个访问控制修饰符来实现良好的封装,提供了extends关键字让子类继承父类,子类继承父类就可以继承到父类的成员变量和和方法,如果访问控制允许,子类实例可以直接调用父类里定义的方法。继承是实现类复用的重要手段。使用继承关系来实现复用时,子类对象可以直接赋给父类变量,这个变量具有多态性。 面向对象的程序设计过程中有两个重要的概念:类(Class)和对象(object,也被称为实例,instance)。类可以包含三种最常见的成员:构造器、成员变量、和方法。 构造器用于构造该类的实例,java语言通过new关键字类调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此java语言提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器,这个构造器总是没有参数的。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。 构造器用于对类实例进行初始化操作,构造器支持重载,如果多个重载的构造器里包含了相同的初始化代码,则可以把这些初始化代码放置在普通初始化块里完成,初始化块总在构造器执行之前被调用。静态初始化块代码用于初始化类,在类初始化阶段被执行。如果继承树里某一个类需要被初始化时,系统将会同时初始化该类的所有父类。 构造器修饰符:可以是public、protected、private其中之一,或者省略构造器名:构造器名必须和类名相同。 注意:构造器既不能定义返回值类型,也不能使用void声明构造器没有返回值。如果为构造器定义了返回值类型,或使用void声明构造器没有返回值,编译时不会出错,但java会把这个所谓的构造器当成方法来处理——它就不再是构造器。 实际上类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回该类的实例,可以把这个类的实例当成构造器的返回值。因此构造器的返回值类型总是当前类,无须定义返回值类型。不要在构造器里显式的使用return来返回当前类的对象,因为构造器的返回值是隐式的。 java类名必须是由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 成员变量: 成员变量的修饰符:public、protected、private、static、final前三个只能出现一个再和后面的修饰符组合起来修饰成员变量,也可省略。 成员变量:由一个或者多个有意义的单词连缀而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。 类型:可以是java语言允许的任何数据类型,包括基本类型和引用类型。 成员方法: 方法修饰符:public、protected、private、static、final、abstract,前三个只能出现一个,static和final最多只能出现其中的一个,和abstract组合起来使用。也可省略。 返回值类型:可以是java语言的允许的任何数据类型,包括基本类型和引用类型。 方法名:和成员变量的方法命名规则相同,通常建议方法名以英文动词开头。 方法体里多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句总是后执行。 static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员表明它属于这个类本身,而

《Java编程基础知识点汇总及习题集》--答案

目录 第一章 Java入门 (2) 第二章 Java基础 (5) 第三章条件转移 (16) 第四章循环语句 (22) 第五章方法 (28) 第六章数组 (35) 第七章面向对象 (44) 第八章异常 (65)

第一章Java入门 知识点汇总 1、JAVA 三大体系 ?Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个平台中最核心 的部分,包含Java最核心的类库。 ?JavaEE:(J2EE,Java 2 Platform, Enterprise Edition,企业版),开发、装 配、部署企业级应用,包含Servlet、JSP、 JavaBean、JDBC、EJB、Web Service等。 ?Java ME:(J2ME,Java 2 Platform Micro Edition,微型版),用于小型电子设备 上的软件开发。 2、JDK,JRE,JVM的作用及关系 作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 ?path环境变量:存放可执行文件的存 放路径,路径之间用逗号隔开 ?classpath环境变量:类的运行路径, JVM在运行时通过classpath加载需要 的类 4、重点掌握两个程序 ?javac.exe:Java编译器工具,可以将编 写好的Java文件(.java)编译成Java 字节码文件(.class); ?java.exe:Java运行工具,启动Java虚 拟机进程,运行编译器生成的字节码 文件(.class) 5、一切程序运行的入口 public static void main(String args []){ System.out.println(“Hello World!”); } 课堂笔记

java面向对象知识点总结

j a v a面向对象知识点总 结 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1 类和对象 类: 类是用来描述一类事物的共性内容的, 类是抽象的; 创建类,如何描述 属性功能 用变量来描述属性 用方法来描述功能 对象: 就是现实中具体的事物,对象是具体的; 创建对象 类名对象名 = new 类名(); 如何通过对象访问类中属性和方法呢 对象名.变量名 对象名.方法名(); 只要是new的对象,就是新创建的,就会在内存中开辟一段单独的空间匿名对象 创建的对象没有赋值给具体的变量; 所以给匿名对象的属性赋值是没有任何意义的; 匿名对象使用场景

1 调用方法 2 作为参数传递 3 添加进容器中 This 关键字 This. 类中的普通方法访问到的成员前边都有this.这个关键字This. 就代表当前对象, 普通方法, 创建对象调方法, 谁调用就代表谁 This(); 可以用来在构造函数中调用本类与之相对应的构造函数使用注意事项: 1 this() 只能是构造函数的第一条执行语句 2 this() 不能在构造函数之间相互调用 3 this() 不能调用自己 构造函数(方法) 构造函数的作用 用来给对象进行初始话的(初始化就是指给对象的各个属性赋值) 构造函数何时执行 对象一创建就会调用与之相对应的构造函数

构造函数语法 修饰符没有返回值类型类名(参数列表){ 具体执行的代码 } 构造函数自动添加 当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造, 如果我们指定了,就不添加了 构造函数和普通函数的区别 执行时机不同 对象一创建就会调用与之相对应的构造函数 普通函数只有被调用才会执行 return 1 就是用来在方法中返回具体结果(结果类型必须和方法的返回值类型一致) 2 即便方法的返回值类型是void,方法中也可以出现 return; 3 构造函数中也可以有return关键字 成员变量和局部变量 1 作用范围不同, 成员变量是定义在类中的,在整个类中都起作用 局部变量是定义在方法中的,在所在代码块起作用

JAVA技术--Java基础知识常见考试题JAVA技术.doc

一、单选题 1.对类:(B) public class Test( //...do something } 下面那个正确地定义了类Test的构造函数。 A)public void Test() () B)publicTest()(} C ) public static Test() (} D) publicTest(); 2.下面哪个函数是public void example()(...)的重载函数。(A) A)public void example( float f)(...) B)public int example() (...) C)public void example2()(...} D)public int example_overLoad ()(...) 3.下面的代码段中,执行之后i和j的值是_C_。 int i = 1; intj; j = i++; A)1, 1 B) 1,2 C) 2, 1 D) 2,2 4.以下for循环的执行次数是_B o for(int x=0,y=0;(y !=0)&&(x<4) ;x++); A)无限次B) 一次也不执行 C)执行4次D)执行3次 5.下面程序的输出结果是—C o public class People( String name; int id; public People( String str, int n )( name = str; id = n; } public String toString(){ return id + " :” + name; } public String print()(

《Java编程基础知识点汇总及习题集》--答案

目录 第一章Java入门2? 第二章 Java基础5? 第三章条件转移1?4 第四章循环语句20? 第五章方法 ............................................... 26 第六章数组33? 第七章面向对象........................................... 42第八章异常63? ? 第一章Java入门 知识点汇总 1、JAVA 三大体系 ?Java SE:(J2SE,Java2 Platform Standard Edition,标准版),三个 平台中最核心的部分,包含Java最核 心的类库。?JavaEE:(J2EE,Java 2 Platform, EnterpriseEdition,企业版), 开发、装配、部署企业级应用,包含 Servlet、JSP、JavaBean、JDB C、EJB、Web Service等。 ?Java ME:(J2ME,Java 2 Platfor mMicro Edition,微型版),用于 小型电子设备上的软件开发。

2、JDK,JRE,JVM的作用及关系 作用 ★JVM:保证Java语言跨平台 ★JRE:Java程序的运行环境 ★JDK:Java程序的开发环境 关系 ★JDK:JRE+工具 ★JRE:JVM+类库 3、JDK环境变量配置 ?path环境变量:存放可执行文件的存 放路径,路径之间用逗号隔开 ?classpath环境变量:类的运行路径,J VM在运行时通过classpath加载需 要的类 4、重点掌握两个程序 ?javac.exe:Java编译器工具,可以将 编写好的Java文件(.java)编译成 Java字节码文件(.class); ?java.exe:Java运行工具,启动Java 虚拟机进程,运行编译器生成的字节 码文件(.class) 5、一切程序运行的入口 publicstatic voidmain(String args []){ System.out.println(“Hel lo World!”); } 课堂笔记 练习题 一、填空题 1、Java的三个技术平台分别是(J2SE )、(J2EE)、(J2ME)。 2、Sun公司针对领域不同,提供了三个Java版本,其中对于个人计算机程序开发的是( J2SE ), 对于企业开发应用的是(J2EE),对于嵌入式设备应用开发的是( J2ME )。 (classpath )。 3、建立Java开发环境,安装JDK,一般需要设置环境变量(path)、 4、编写一个Java源程序,其文件名为Test.java,则编译该源程序的命令为(javac ),运行 该程序的命令为( java),生成文档注释的命令为( javadoc)。 5、Java程序的运行环境简称之为( JRE)。

java各知识点详细总结(毕向东笔记整理)

Java基础知识总结 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。demo 4,该技术什么时候用?test。 ----------------------------------------------------------------------------------------------- 一:java概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器; 1994年将Oak语言更名为Java; Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发; JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;

JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序; 1,JDK:Java Development Kit,java的开发和运行环境,java 的开发工具和jre。 2,JRE:Java Runtime Environment,java程序的运行环境,java 运行的所需的类库+JVM(java虚拟机)。 3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdk path=%JAVA_HOME%\bin 2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。 classpath的配置: 1):永久配置方式:classpath=.;c:\;e:\ 2):临时配置方式:set classpath=.;c:\;e:\ 注意:在定义classpath环境变量时,需要注意的情况如果没有定义环境变量classpath,java启动jvm后,会在当前目录下查找要运行的类文件;

java期末考试知识点总结

java知识点总结 应同学要求,特意写了一个知识点总结,因比较匆忙,可能归纳不是很准确,重点是面向对象的部分。 java有三个版本:JAVA SE 标准版\JAVA ME移动版\JAVA EE企业版 java常用命令:java, javac, appletview java程序文件名:.java, .class java的两类程序:applet, application; 特点,区别,这两类程序如何运行 java的主方法,主类,共有类;其特征 java的数据类型,注意与C++的不同,如字符型,引用型,初值 java与C++的不同之处,期中已总结 java标记符的命名规则 1)标识符有大小写字母、下划线、数字和$符号组成。 2)开头可以是大小写字母,下划线,和$符号(不能用数字开头) 3)标识符长度没有限制 4)标识符不能使关键字和保留字 面向对象的四大特征 抽象、封装、继承、多态 封装,类、对象,类与对象的关系,创建对象,对象实例变量 构造函数,默认构造函数,派生类的构造函数,构造函数的作用,初始化的顺序,构造方法的重载 构造函数:创建对象的同时将调用这个对象的构造函数完成对象的初始化工作。把若干个赋初值语句组合成一个方法在创建对象时一次性同时执行,这个方法就是构造函数。是与类同名的方法,创建对象的语句用new算符开辟了新建对象的内存空间之后,将调用构造函数初始化这个新建对象。 构造函数是类的特殊方法: 构造函数的方法名与类名相同。 构造函数没有返回类型。 构造函数的主要作用是完成对类对象的初始化工作。 构造函数一般不能由编程人员显式地直接调用。 在创建一个类的新对象的同时,系统会自动调用该类的构造函数为新对象初始化。 类的修饰符:public类VS 默认; abstract类; final类; 1)类的访问控制符只有一个:public,即公共的。公共类表明它可以被所有其他类访问和引用。 若一个类没有访问控制符,说明它有默认访问控制特性,规定该类智能被同一个包中的类访问引用(包访问控制)。 2)abstract类:用abstract修饰符修饰的类被称为抽象类,抽象类是没有具体对象的概念类,抽象类是它所有子类的公共属性集合,用抽象类可以充分利用这些公共属性来提高开发和维护效率。 3)final类:被final修饰符修饰限定的,说明这个类不能再有子类。所以abstract与final 不能同时修饰一个类。 域和方法的定义 1)域:定义一个类时,需要定义一组称之为“域”或“属性”的变量,保存类或对象的数据。

Java基础阶段复习题2(附答案)

复习题2 如有雷同,纯属巧合! 1.下列哪一种叙述是正确的() A. abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 2.下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 3.以下哪个表达式是不合法的() A、String x=”Hello”; int y=9; x+=y; B、String x=”Hello”; int y=9; if(x= =y) { } C、String x=”Hello”; int y=9; x=x+y; D、String x=null; int y=(x!=null)&&(x.length()>0) ? x.length() : 0 4.下列关于修饰符混用的说法,错误的是() A.abstract不能与final并列修饰同一个类 B.abstract类中不可以有private的成员 C.abstract方法必须在abstract类中 D.static方法中能处理非static的属性 5.()修饰符允许对类成员的访问不依赖于该类的任何对象 A、abstract B、static C、return D、public 6.关于被私有访问控制符private修饰的成员变量,以下说法正确的是() A.可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类 B.可以被两种类访问和引用:该类本身、该类的所有子类 C.只能被该类自身所访问和修改 D.只能被同一个包中的类访问

java基础刷题知识点总结

基础 1.object类的方法有哪些 clone() protect 创建并返回一个对象的副本 equals()用来比较某个对象是否与调用此方法的对象相等 finalize() protect getClass() 返回一个对象的运行时类 hashCode()返回一个对象的hash值 notify()唤醒在此对象监听器上等待的单个线程。如果有多个,则随机唤醒一个 notifyAll()唤醒在此对象监听器上等待的所有线程 registerNatives() 本地私有方法,在类初始化是会调用此方法 toString() 返回当前对象的字符串表示 wait()使当前线程处于等待直到其他线程调用这个对象的notify或notifyAll方法或者超过指定的时间量 2.接口和抽象类的区别 1.首先描述接口和抽象类的特性 抽象类:是子类通用特性的集合 接口:是抽象方法的集合l 从某种意义上说抽象类包含了接口的所有功能。但是通过实现接口可以实现多继承

什么时候用抽象类和接口 1.如果一些方法必须提供默认的实现,就必须用抽象类,比如在dao层,每个类都有增删查改这几个操作,我们可以把这些操作写在抽象类里,并让抽象类提供默认的实现。 否则的话用接口 2.假如要实现多继承,则必须要用接口,java不支持多继承但是可以通过实现多个接口来解决 3.如果基本功能在不断改变,那么就用抽象类。如果不断改变基本功能并且使用接口,子类就必须不停的更改 03.抽象类是否有构造方法 抽象类有构造方法只是抽象类不能够实例化 4.Final finally finalize()方法的区别 5.Sleep()和wait()的区别 ①这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。 ②锁: 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS 分配系统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到只能调用interrupt()强行打断。 Thread.sleep(0)的作用是“触发操作系统立刻重新进行一次CPU竞争”。 ③使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,配合synchronized实现等待通信机制,而sleep可以在任何地方使用。 synchronized(x){ x.notify() //或者wait() }

javaweb知识点总结

javaweb知识点总结 篇一:javaweb期末复习知识点整理 1、 Web应用概述 1. URL与URI URL: 统一资源定位器 URI:统一资源定位符 2. 常见HTML标签 3. 表单的处理 4. 静态文档与动态文档的概念:静态文档是一种以文件的形式存放在服务器端的文档,客户发出对该文档的请求,服务器返回这个文档。动态文档是指文档的内容可根据需要动态生成,又可分为服务器端动态文档和客户端动态文档技术。 5. Servlet概念:服务器端小程序,是使用ServletAPI 以及相关类编写的java程序,主要用来扩展web服务器的功能。 6. 处理404错误:查看给定的路径名是否正确,查看Servlet类文件是否在classes目录下,查看文件内容是否正确,查看tomcat是否启动 2、 Servlet技术模型 1. Servlet的API:包,包 Servlet接口及方法 :

1) public void init(ServletConfig config):完成Servlet初始化并准备提供服务。容器传给该方法一个ServletConfig类型的参数。 2)public void service(ServletRequest req,ServletResponse res)throw ServletException,IOException:对每个客户请求容器调用一次该方法,它允许Servlet为请求提供响应。 3) public void destroy()该方法由容器调用,指示Servlet清除本身,释放请求的资源并准备结束服务。 4) public ServletConfig getServletConfig()返回关于Servlet的配置信息,如传递给init()方法的参数。 5) public String getServletInfo()返回关于Servlet 的信息,如作者,版本及版权信息。 ServleConfig接口作用及方法 HttpServlet类 :新的service方法,doGet,doPost HttpServletRequest接口及常用方法 HttpServletResponse接口及常用方法 2. Servlet的开发步骤 编写一个Servlet类 编译 部署 (1)在tomcat的虚拟目录下,创建Web目录

java基础知识练习题

Java基础测试题 一、选择题(每题2分) 1、在JAVA编程中,Java编译器会将java程序转换为()。 A. 字节码; B. 可执行代码; C. 机器代码; D. 以上所有选项都不正确。 2、下列那些不是合法的标识符?() A. Tel_num B. 8ABc C. Emp_1 D. b123.6 E. NULL F. Hello World 3、以下字符常量中不合法的是( )。 A. '|' B. '\'' C."\n" D.'我' 4、下列语句编译没有错误的是:() A. float a=1.5; B.byte a=129; C.byte a=5; D.byte a=(byte)200; 5、java中int数据类型在内存中表示为() A. 2个字节 B.4个字节 C. 由程序员指定 D. 以上都不正确 6、下列程序段执行后t5的结果是( )。 int t1 = 9, t2 = 11, t3=8; int t4,t5; t4 = t1 > t2 ? t1 : t2+ t1; t5 = t4 > t3 ? t4 : t3; A. 8 B.20 C.11 D.9 7、若有定义int a = 2;则执行完语句a += a -= a * a; 后,a的值是( )。 A. 0 B. 4 C. 8 D.–4 8、设 a, b, c, d 均为 int 型的变量,并已赋值,下列表达式的结果属于非逻辑值的是( ) A. a!=b & c%d < a B.a++ = =a+b+c+d C.++a*b--+d D.a+b>=c+d 9、以下代码段执行后的输出结果为() int x=3; int y=10; System.out.println(y%x); A.0 B.1 C.2 D.3 10、下列语句序列执行后,k 的值是( )。 int i=10, j=18, k=30; switch( j - i ) { case 8 : k++; case 9 : k+=2; case 10: k+=3; default : k/=j; } A. 31 B. 32 C. 2 D.33 11、假定有变量定义: int k=7,x=12; 则能使值为3的表达式是()。 A. x%=(k%=5) B.x%=(k-k%5) C. x%=k-k%5 D. (x%=k)-(k%=5) 12、设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是()。 A. 把x和y按从大到小排列 B. 把x和y按从小到大排列

Java期末知识点整理总结

Java期末知识点整理总结 计科2班苏锐师编号47 学号201330551464 第一章 Java语言概述 1. Java语言发展历史和现状及前景 2. Java语言的特点: 简单、面向对象、分布式、健壮性、结构中立、 安全性、可移植、解释的、高性能、多线程、多态性 3. Java虚拟机概念(JVM),Java程序的执行过程 4. Java应用程序分类:Application和Applet 5. Java程序的开发环境:JDK,IDE 第二章 Java数据类型及其运算 1. 标识符与保留字 1.2 标识符命名语法规则与Java推荐的标识符命名规则 1.3 Java中的关键字 2. 数据类型byte, short, int long, char, float, double, boolean 注意点:Java中所有数据类型是确定的,与平台无关,没有sizeof操作,其中特别注意char 类型是2字节Unicode编码,与C++ 不同;知道基本类型都有对应的默认值。 整型数的十进制、八进制、十六进制值的表示。 实型数的十进制、十六进制与科学计数法表示,注意实型常量默认类型为double型。 3. 运算符与表达式算术运算符: + - * / % ++ -- 关系运算符:> >= < <= == != 逻辑运算符:&& || !& | 注意短路计算与非短路计算的差别 位运算符: >> << >>> & | ^ ~ 要认识异或(^)与按位取反(~)运算符 赋值运算符: += -= *= /= %= &= |= ^= <<= >>= >>>= 要注意赋值运算符中包含了强制转换: 若: int k = 1; k += 44.232D; 则相当于: k = (int) ( k + 44.232D); 条件运算符:exp ?stat1 :stat2 要注意stat1与stat2要求类型相兼容且不能为void类型。运算符的优先级:算术运算 > 关系运算> 逻辑运算

java基础知识详细整理(图文并茂深入浅出)

JSE第一部分 分享者:张振羽 2017.6.30

1.什么是 JDK API (1) Application Programming Interface ,应用程序编程接口 (2) 是一些预先定义的函数,开发人员可提供直接调用的功能。 2.JDK包结构 便于维护,按照功能划分,不同功能的累划分在不同功能的包中,常用的包如下表: 3.字符串的基本操作 3.1 String 及其API

3.1.1 String (1) String是不可变对象 (2) https://www.doczj.com/doc/132976307.html,ng.String使用了final修饰,不能被继承。 (3)字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中 (4) 任何一个字符对应2个字节的长度,1个字节 = 8位二进制。 3.1.2 String s=new String (“abc”) (1) 众所周知,答案是:创建两个对象 (2) why?举例子: 分析步骤: a) 栈中开辟一块空间存放引用str1(地址信息); b) String池中有一块空间,存放String常量"abc"; c) 引用str1指向池中String常量"abc"; d) str1所指代的地址即常量"abc"所在地址,输出为true; 结论:创建了一个引用对象str1

分析步骤: 1) 栈中开辟一块空间存放引用str3; 2) 堆中开辟一块空间存放一个新建的String对象"abc"; 3) 引用str3指向堆中的新建的String对象"abc"; 4) str3所指代的对象地址为堆中地址,而常量"abc"地址在池中,输出false; 3.2 StringBuilder常见API

Java基础知识整理教学教材

Java知识点总结 1环境搭建与开发 1.1 环境变量 JA V A_HOME:Java的安装目录; CLASSPATH:指定一个路径列表,用于搜索Java在编译或运行时需要用到的类(.class文件); PATH:指定一个路径列表,用于搜索可执行文件。 1.2 Java SDK应用 编译:Javac 类名.class; 运行:Java 类名; 打包:jar cf test.jar test (把当前目录下的test目录下的所有文件压缩到test.jar文件中)。 2变量与常量 Java中的常量用保留字final来实现。 变量:局部变量(local variable)、实例变量(instance variable)、类变量(class variable);任何变量在使用前都必须初始化,局部变量必须显示初始化,实例变量在类的构造方法被调用时初始化(分配默认值),类变量在类被加载时被初始化。 3标识符 3.1 命名 在Java语言中,标识符的定义规则是以字母、下划线、美元符开始,后面可以跟字母、下划线、美元符、数字。 因为Java语言使用Unicode字符集,所以对字母不仅限于英文,还可以是日文、韩文、阿拉伯文、中文等。 区分大小写,没有字数限制。

3.2 关键字 3.2.1static static方法中不能有this和super关键字(static方法不是“面向对象”的,而是“面向类”的)。 static方法中只能访问所属类的static方法和变量。 static数据成员的初始化:在第一次生成该类的对象时初始化。 3.2.2final 1)final数据 a)static final ●更加典型的定义方式是public static final; ●占用一段不能改变的存储空间; ●代表编译时常量,即在编译器就能知道其值(如果只声明为final或 者static,是在运行时才知道值)。 ●全部用大写字母命名,单词之间用下划线隔开。 b)final数据与final引用 ●final数据的值不能被改变; ●final引用是指无法将其指向一个新的对象(数组也是一种引用),对 象本身的值是可以改变的。 c)空白final(声明为final却未赋初始值) ●可以做到根据对象有所不同,又保持恒定不变的特性; ●必须保证使用前已经初始化:在定义处赋值或者在构造器中赋值。 2)final参数 ●无法在方法中更改引用所指向的对象。 3)final方法 ●禁止覆盖,防止任何继承类修改它的定义; ●private方法都是final的,因此private方法无法覆盖。 4)final类 ●不允许继承该类; ●final类中的所有方法都隐式指定为final的。

java各知识点详细总结

基础知识总结 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4,代码实现。用具体的语言代码把思路体现出来。 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用。 4,该技术什么时候用?。 一:概述: 1991 年公司的等人开始开发名称为的语言,希望用于控制嵌入在有线电视交换盒、等的微处理器; 1994年将语言更名为; 的三种技术架构: :,开发企业环境下的应用程序,主要针对程序开发; :,完成桌面应用程序的开发,是其它两者的基础; :,开发电子消费产品和嵌入式设备,如手机中的程序; 1,:,的开发和运行环境,的开发工具和。 2,:,程序的运行环境,运行的所需的类库(虚拟机)。 3,配置环境变量:让\目录下的工具,可以在任意目录下运行,原因是,将该工具

所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。 环境变量的配置: 1):永久配置方式:安装路径%\\ \ 2):临时配置方式::\ \\\ 特点:系统默认先去当前路径下找要执行的程序,如果没有,再去中设置的路径下找。 的配置: 1):永久配置方式::\:\ 2):临时配置方式::\:\ 注意:在定义环境变量时,需要注意的情况 如果没有定义环境变量,启动后,会在当前目录下查找要运行的类文件; 如果指定了,那么会在指定的目录下查找要运行的类文件。 还会在当前目录找吗?两种情况: 1):如果的值结尾处有分号,在具体路径中没有找到运行的类,会默认在当前目录再找一次。 2):如果的值结果出没有分号,在具体的路径中没有找到运行的类,不会再当前目录找。 一般不指定分号,如果没有在指定目录下找到要运行的类文件,就报错,这样可以调试程序。 4,命令和命令做什么事情呢? 要知道是分两部分的:一个是编译,一个是运行。 :负责的是编译的部分,当执行时,会启动的编译器程序。对指定扩展名的文件进

Java学习知识点情况总结

JAVA知识点总结 1.JAVA的特点: ○1简单易用、完全面向对象; ○2与平台无关性、可扩展性强; ○3可移植性高、支持分布式编程; ○4健壮、安全可靠并性能优异; ○5支持多线程开发技术; ○6支持动态开发。 2.JVM:Java虚拟机(JVM是Java实现跨平台的基础)。 Java的源程序(*.java)编译(命令:java+文件名.java)Java字节码(*.class编译时自动形成,与源程序名一致) 运行(命令:java+源程序的文件名)JVM(Windows、Linux) 开发工具,Javac及基础核心类 JDK 运行环境,Java及基础核心类 3.编写第一个Java程序: Java源文件扩展名为:”.java” 一个源文件中最好只有一个java类,但是可以包含多个类 public修饰的类,文件名与类名必须一致(包括大小写) 被运行的类中需要有一个方法: public static void main(String[ ] args){} 一个源文件中最多有一个public修饰的类

例如:public class Test{ public static void main(String args[]){ System.out.println(“这个编写的第一个java程序!!!”); } } 在运行程序之前先配置环境变量: path变量值为:JDK安装目录下\bin; classpath变量值为:JDK安装目录下\lib; 或 .;JDK安装目录下\lib\tools.jar 在dos命令窗口中输入以下命令进行运行: 编译命令:javac Test.java 运行命令:java Test 生成文档命令:javadoc Test.java 4.Java编程规范 A、命名规定 包:包名应该是小写的名词。 如:package shipping.objects 类:类名应该是名词,大小写混合,每个单词的首字母大写。 如:class AccountBook 接口:接口名的大小写应该与类名一样。 如:interface Account 方法:方法名应该动词,大小写混合,首字母小写。每个方法名中,以大写字母区分单词。限制使用下划线。

Java知识总结完整版

第1章 Java概述 Java语言的特特点 一种面向对象的语言;一种平台无关的语言;一种健壮的语言,吸收了C/C++的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等) Java的两种核心机制 Java虚拟机(Java Virtual Machine) 垃圾回收机制(Garbage Collection) 源程序(*.java文件)→Java编译器→字节码(*.class文件)→类装载器→字节码校验器→解释器→操作系统平台 一次编译,随处运行 Java是一种解释型语言 JDK(Java Development Kit)软件开发工具包 JRE(Java Runtime Environment)运行时环境 开发需要JDK;用户只需JRE PATH:WINDOWS系统执行命令时要搜寻的路径(如javac.exe,java.exe)CLASSPATH:Java在编译和运行时要找的class所在路径(“.”代表当前路径) java:运行java程序 javac:编译java程序

java –version 一个源文件最多只能有一个public类,其他类数量不限,源文件名必须与public 类名一致 Java应用程序的执行入口时main()方法:public static void main(String[] args){…} Java语言中严格区分大小写 编译后,每一个类都对应一个class文件 第2章基础语法 标示符由字母、下划线”_”、美元符”$”或数字组成 标示符应以字母、下划线、美元符开头 Java标示符对大小写敏感,长度无限制,注意“见名知意”且不能与Java语言关键字重名 goto和const虽然未使用,但也被作为Java的关键字保留

相关主题
文本预览
相关文档 最新文档