java有哪些函数_Java基础知识整理
Java基础知识汇总
1、Java语⾔有哪些优点
(1)⾯向对象。
(2)平台⽆关性,“⼀次编译,到处执⾏”。
(3)Java提供了很多的类库,通过这些类库简化了开发⼈员程序设计⼯作。
(4)提供了对Web应⽤开发的⽀持,例如Applet、Servlet和Jsp可以⽤来开发Web应⽤程序。
(5)具有较好的安全性和健壮性。
2、⾯向对象的特征
封装:封装是把数据和操作数据的⽅法绑定起来,对数据的访问只能通过已定义的接⼝。
继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为⽗类(超类/基类),得到继承信息的被称为⼦类(派⽣类)。
多态:指程序中定义的引⽤变量所指向的具体类型和通过该引⽤变量发出的⽅法调⽤在编程时并不确定,⽽是在程序运⾏期间才确定,即⼀个引⽤变量到底会指向哪个类的实例对象,该引⽤变量发出的⽅法调⽤到底是哪个类中实现的⽅法,必须在由程序运⾏期间才能决定。实现多态需要做两件事情:继承(⼦类继承⽗类并重写⽗类的⽅法)和⽗类型引⽤指向⼦类对象。
3、Java基本的数据类型与其包装类有哪些
java中有8种基本数据类型,默认值和对应的包装类如下:
数据类型字节长度默认值包装类
byte
1
Byte
short
2
Short
int
4
Integer
long
8
0L或0l
0.0F或0.0f
Float
double
8
0.0
Double
char
2
u0000
Character
boolean
1
false
Boolean
4、Java中的访问权限修饰符有哪些
Java中有四种权限修饰符,权限如下所⽰:
注意:没有default这个关键字,它就是代表默认的意思,即什么修饰符也不加。⼀个Java⽂件中可以定义多个类,但最多只有⼀个类能被public修饰,并且这个类的类名与⽂件名必须相同。java接口有没有构造方法
当前类同包⼦类其他包
public
√
√
√
√
protected
√
√
√
×
default
√
private
√
×
×
×
(1)public:表明该成员变量或⽅法对所有类或对象都是可见的,所有类或对象都可以直接访问
(2)protected:表明该成员变量或⽅法对⾃⼰及其⼦类是可见的,即⾃⼰和⼦类具有权限访问。除此之外的其他类或对象都没有访问权限
(3)default:表明该成员变量或⽅法只有⾃⼰和与其位于同⼀包内的类可见。若⽗类与⼦类位于同⼀包内,则⼦类对⽗类的default成员变量或⽅法都有访问权限,若⽗类与⼦类位于不同的包,则没有访问权限。
(4)private:表明该成员变量或⽅法是私有的,只有当前类对其有访问权限。
5、重载和重写(覆盖)的区别
重载:重载发⽣在同⼀个类中,同名的⽅法具有不同的参数(参数个数不同、参数类型不同、参数顺序不同),不能通过⽅法的访问权限、返回值类型和抛出的异常类型来进⾏重载。
重写:重写发⽣在⼦类和⽗类之间,⼦类中的重写⽅法必须和⽗类中被重写的⽅法有相同的函数名和参数、相同的返回值类型。⼦类重写⽅法⽐⽗类被重写⽅法更好的访问,⼦类的重写⽅法所抛出的异常必须和⽗类中被重写的⽅法所抛出的异常⼀致。⽗类中被重写的⽅法不能为private。
6、什么是构造函数
构造函数是⼀种特殊的函数,⽤来在对象实例化时初始化对象的成员变量。构造函数具有以下特点:
(1)构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void)
(2)每个类可以有多个构造函数
(3)构造函数可以有0个或多个以上的参数
(4)构造函数伴随着new操作⼀起调⽤,且不能由程序的编写者直接调⽤,必须由系统调⽤构造函数在对象实例化时会被⾃动调⽤,且只运⾏⼀次。
(5)构造函数不能被继承,因此,它不能被覆盖,但是构造函数可以被重载,可以使⽤不同的参数个数或参数类型来定义多个构造函数。
(6)⼦类可以通过super关键字来显⽰地调⽤⽗类的构造函数。当⽗类没有提供⽆参数的构造函数时,⼦类的构造函数必须显式地调⽤⽗类的构造函数。如果⽗类提供了⽆参数的构造函数,⼦类的构造函数就可以不显式地调⽤⽗类的构造函数,这种情况下编译器会默认调⽤⽗类提供的⽆参数构造函数。在实例化对象时,会先执⾏⽗类的构造函数,然后在执⾏⼦类的构造函数。
7、抽象类和接⼝有什么异同
(1)通过把类或类中的某些⽅法声明为abstract(abstract只能⽤来修饰类或⽅法,不能⽤来修饰属性),来表⽰⼀个类是抽象类。接⼝通过关键字interface来实现,接⼝中的⽅法没有⽅法体。
(2)接⼝和抽象类都不能被实例化。
(3)抽象类中可以有抽象⽅法和具体⽅法,接⼝中只能有抽象⽅法。
(4)⼀个类可以实现多个接⼝,但⼀个类只能继承⼀个抽象类。因此,使⽤接⼝可以间接地达到多重继承的⽬的。
(5)接⼝中的成员变量默认为 public static final,只能够有静态的不被修改的成员。所有成员⽅法都都必须是public、abstract的。抽象类
(1)在Java中,this⽤来指向当前实例对象,⽤来区分对象的成员变量和⽅法的参数。
classPeople{
String name;//正确写法
publicPeople(String name){this.name =name;
}//错误写法
publicPeople(String name){
name=name;
}
}
上例中,第⼀个构造函数使⽤ this.name 来表⽰左边的值是成员变量,⽽不是这个构造函数的成员参数。
(2)super可以⽤来访问⽗类的成员⽅法或成员变量。
(3)this和super都必须放在构造⽅法内的第⼀⾏
(4)this和super不能出现在同⼀个构造函数内。
(5)this和super都不能在static环境中使⽤。
9、short s1 = 1; s1 = s1 + 1 有错吗?short s1 = 1; s1 += 1 有没有错误?
对于short s1 = 1;s1 = s1 + 1,在 s1 + 1 运算时会⾃动提升表达式的类型为int ,那么将 int 型值赋值给 short 型变量,s1 会出现类型转换错误。
⽽对于short s1 = 1; s1 += 1," += "是 Java 语⾔的运算符,Java 编译器会对其进⾏特殊处理,因此编
译通过。
10、length和length()的区别
length属性是⽤来统计数组的长度
length()⽅法是⽤来计算字符串的长度
11、&和&&的区别?
&和&&都可以⽤作逻辑与的运算符,表⽰逻辑与(and),当运算符两边表达式的结果都为true时,整个运算结果才为true。
否则,结果为false。&&还具有短路的功能,即如果第⼀个表达式为false,则不再计算第⼆个表达式。
12、static关键字有哪些作⽤
(1)静态变量Java类中提供了两种类型的的变量。⽤static修饰的静态变量和不⽤static修饰的实例变量,静态变量属于类,在内存中只有⼀个复制。只要静态变量所在的类被加载,这个静态变量就会被被分配空间。对静态变量的引⽤有两种⽅式,分别为" 类.静态变量 "和" 对象.静态变量 "。
(2)静态⽅法与变量类似,Java也同时提供了static⽅法和⾮static⽅法。static⽅法是类⽅法,不需要创建对象就可以被调⽤。static⽅法不能使⽤this和super关键字,不能调⽤⾮static⽅法,只能访问所属类的静态变量和静态⽅法。
(3)静态代码块static代码块经常被⽤来初始化静态变量。static代码块不在任何⼀个⽅法体内,JVM在加载类时会执⾏static代码块,如果有多个static代码块,JVM会按顺序来执⾏。需要注意的是,static代码块只会被执⾏⼀次
(4)静态内部类静态内部类可以不依赖于外部类实例对象⽽被实例化,⽽通常的内部类需要在外部类实例化后才能实例化。静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类的静态成员和静态⽅法。
在使⽤switch(expr)时,expr只能是⼀个枚举常量或⼀个整数表达式,整数表达式可以是基本类型int或其包装类Integer,当然也包括不同的长度整型,例如short。由于byte、short和char类型的值都能被隐式的转换为int类型,因此这些类型以及他们对应的包装类型都可以作为switch的表达式。但是,long、float、double、String不能隐式的转换为int类型,因此不能被作为switch的表达式,如果⼀定要作为switch的表达式的话,必须将其强制转换为int才可以。注意:在JDK1.7版本之后 switch开始⽀持String类型了。
14、transient 关键字的作⽤
对于不想被序列化的变量,使⽤transient关键字修饰,transient 关键字只能修饰变量,⽽不能修饰⽅法和类。
15、⽤最有效率的⽅法计算2乘以8
2 << 3(左移3位相当于乘以2的3次⽅,右移3位相当于除以2的3次⽅)。
16、Math类中round、ceil和floor⽅法的作⽤
(1)round:表⽰四舍五⼊,是在原来数字的基础上先加 0.5 ,然后在向下取整。und(-11.5)的结果是-11,und(11.5)的结果是12
(2)ceil:表⽰向上取整,il(a) 就是取⼤于a的最⼩整数值。
(3)floor:表⽰向下取整,Math.floor(a) 就是取⼩于a的最⼤整数值。
17、== 和 equals、hashCode的区别
==:对于基本数据类型,== ⽐较的是数值是否相等。对于引⽤数据类型,则⽐较的是对象的地址值是
否相等。
equals:equals()⽅法⽤来⽐较两个对象的是否相等,即引⽤类型的变量所指向的对象的地址。但是String、Integer 重写了equals⽅法,所以 equals ⽐较的是值是否相等。
public class test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s1 == s2); //true
System.out.println(s1 == s3); //false
System.out.println(s3 == s4); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //true
System.out.println(s3.equals(s4)); //true
}
}
hashCode:hashCode()⽤来返回这个对象的散列码。散列码可以是任何整数,包括正数和负数。这个散列码可以⽤来确定该对象在哈希表中的索引位置。使⽤哈希表的话,可以快速定位到对象的⼤概存储位置,⽽且如果两个对象的hashCode不相同,就不在需要调⽤equals() ⽅法。
(1)如果两个对象相等,则 hashCode ⼀定也是相同的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论