主要知识点:
定义类,字段,static修饰,局部,成员变量初始化,
继承,(非)检查异常,读写流,拷贝文件..
1、如何定义一个类、字段、方法;如何创建类的对象;
答:类是java程序的组织单位,任何的java语句,都要写在类文件里面。(这么说不全对,package语句和import语句就可以写在外面,但编译之后一定是在类文件里面的)
类一般形式:class className{类体}
定义字段:Java中字段一般即指成员变量(数据库才说是字段)
access 类型 FieldName;
方法一般形式:
access type methodname (parameter-list){方法体}
访问修饰符 返回类型 方法名称 参数列表
四种显式的创建对象的方式:
● 用new语句创建对象
● 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法
● 调用对象的clone()方法
● 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.
附加:
(当对象作为函数参数时,在函数中只能改变该对象的状态,但不能改变该对象的引用。)
java中的参数传递类型是值传递
2,在方法中定义的局部变量可以不初始化吗?在类中定义的成员变量可以不初始化吗?如果可以不初始化,String类型变量和int类型变量的初始值分别是?
答:局部变量必须要初始化,类中定义的叫做成员变量,可以不初始化,
要明白初始化的必要性就得了解程序在计算机中的运行机制。我们声明的变量都会被计算机记住,放到一个特殊的存储器里,而变量的值会另外记录在一个地方。声明的过程的意义在于:告诉计算机我们创建了一个变量,叫XXX,而初始化的目的是告诉计算机,我们创建的变量的值为YYY。如果不初始化,那么计算机就不知道我们创建的XXX的值是多少了。这时候,要么系统给我们一个默认的值,要么就出现错误!
成员变量会被系统默认初始化,局部变量没这功能,所以必须自己初始化。
还要注意静态成员变量也没系统默认初始化,必须在初始化块或者定义时或者构造函数里进行手动初始化
全局变量的byte,char,short,int,long,float,double的初始化值都是0,boolean默认为false,对象的为null。形如:
注意:main函数里面声明的变量不是全局变量,是局部变量,只能在main方法体中使用,
3,方法修饰为static和不修饰的区别是什么?
答:被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
Java语言中没有全局变量的概念。
4,什么是继承;继承中构造函数的调用顺序是怎么样的?
答:通过继承实现代码复用。Java中所有的类都是通过直接或间接地继承java.lang.Object类得到的。继承而得到的类称为子类,被继承的类称为父类。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。但Java不支持多重继承,即一个类从多个超类派生的能力。在java中,用子类去创建一个对象的时候会首先调用父类的无参构造函数,然后再去调用自己的构造函数!
注意:继承中执行顺序:
1、实现父类公共的静态属性或静态的块级代码
2、实现本身的公共的静态属性
3、实现父类公共属性
4、执行父类的构造方法
5、实现本身的公共属性
6、执行本身的构造函数
7、静态方法不执行
补充:当父类有多个构造函数,若子类用super(参数信息)指明调用父类有参数的构造函数,则不执行无参数的构造方法
5,什么是方法的override?override(重写)和重载的区别是什么?
答:方法的重写(方法的覆盖)
1,发生在继承关系里
2.子类中的重写方法和超类中被重写的方法必须拥有相同的返回值类型,相同的参数列表
方法的重载(overloaded)
发生在同一个类里面
重载的方法和被重载的方法必须拥有相同的方法名;可以拥有不同的返回值类型,必须拥有不同的参数列表
6,int和Integer的区别;什么是拆箱和装箱;
答:int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别:
int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象
1.Java 中的数据类型分为基本数据类型和复杂数据类型
int 是前者而integer 是后者(也就是一个类);因此在类进行初始化时int类的变量初始为0.而Integer的变量则初始化为null.
2.初始化时:
int i =1;Integer i= new Integer(1);(要把integer 当做一个类看);但由于有了自动装箱和拆箱:
自动拆箱:故名思议就是将对象重新转化为基本数据类型:
自动装箱:可以简单的理解为将基本数据类型封装为对象类型,来符合java的面向对象;
7,检查异常和非检查异常;
答:Java的可检测异常和非检测异常泾渭分明。可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则。
非检测异常不遵循处理或声明规则。在产生此类异常时,不一定非要采取任何适当操作,编译器不会检查是否已解决了这样一个异常。有两个主要类定义非检测异常:RuntimeException和Error。
为什么Error子类属于非检测异常?这是因为无法预知它们的产生时间。若Java应用程序内存不足,则随时可能出现OutOfMemoryError;起因一般不是应用程序中的特殊调用,而是JVM自身的问题。另外,Error类一般表示应用程序无法解决的严重问题,故将这些类视为非检测异常。
RuntimeException类也属于非检测异常,一个原因是普通JVM操作引发的运行时异常随时可能发生。与Error不同,此类异常一般由特定操作引发。但这些操作在Java应用程序中会频繁出现。例如,若每次使用对象时,都必须编写异常处理代码来检查null引用,则整个应用程序很快将变成一个庞大的try-catch块。因此,运行时异常不受编译器检查与处理或声明规则的限制。
将RuntimeException类作为未检测异常还有一个原因:它们表示的问题不一定作为异常处理。可以在try-catch结构中处理NullPointerException,但若在使用引用前测试空值,则更简单,更经济。同样,可以在除法运算时检查0值,而不使用ArithmeticException。
8、InputStream/OutputStream和Reader/Writer的区别?
答:从本质上讲,wirter/reader和inputstream/outputstream的最大区别在于encode和decode.
inputstream/outputstream 直接对byte[]进行操作,不会更改任何信息,原原本本的反应数据内容。
writer/reader在操作时会进行decode/encode. 它会根据你的系统属性file.encoding来decode数据。比如你从文件中读取一行,用reader.readLine()返回的string是经过decode的数据。如果你的文件的encoding不等于你的file.encoding的值,就会产生编码错误。
9,如何使用InputStream/OutputStream拷贝一个文件?
答:通过读取字节流,声明缓冲区,大致代码:
InputStream is = new FileInputStream(C:\Java\a.txt);
File destFile = new File("路径",文件名);
OutputStream os = new FileOutputStream(destFile);
byte[] buffer = new byte[400];
int length = 0 ;
while((length = is.read(buffer))>0){
os.write(buffer, 0, length);
}
is.close();
os.close();
10,如何读取properties配置文件;
答:.Properties中的主要方法:
(1)load(InputStream inStream)
这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象。
(2)store(OutputStream out, String comments)
这个方法将Properties类对象的属性列表保存到输出流中。
(3)getProperty/setProperty
这两个方法是分别是获取和设置属性信息。