栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java知识点

Java知识点
  • 一.java语言的优点
  • 二.java与c/c++有什么异同?
  • 三.为什么需要public static void main (String[] args) 这个方法
  • 四.如何实现在main()方法执行前输入"Hello World"
  • 五.Java程序初始化的顺序是怎么样的?
  • 6.Java的作用域有哪些
  • 七、一个Java文件中是否可以多个类
  • 八、什么是构造函数
  • 九、为什么Java中有些接口没有任何方法
  • 十、Java中的clone方法有什么作用?
  • 十一、什么是反射机制
  • 十二、package有什么作用
  • 十三、如何实现类似于C语言中函数指针的功能
  • 十四、面向对象与面向过程有什么区别
  • 十五、面向对象有哪些特征
  • 十六、面向对象的开发方式有什么优点?
  • 十七、什么是继承?
  • 十八、组合和继承有什么区别
  • 十九、多态的实现机制是什么?
  • 二十、重载和覆盖有什么区别
  • 二十一、抽象类(abstract class)与接口(interface)有什么异同
  • 二十二、内部类有哪些

一.java语言的优点
 1. Java为纯面向对象的语言。
 2. 平台无关性。
 3. Java提供了很多内置的类库。
 4. 提供了对Web应用开发的支持,例如,Applet、Servlet和JSP可以用来开发Web应用程序;Socket、RMI可以用来开发分布式应用程序的类库。
 5. 具有较好的安全性和健壮性。
 6. 去除了C++语言中难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类、多重继承等,使得程序更加严谨、简洁。
二.java与c/c++有什么异同?
 1.Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码。因此,Java的执行速度比C/C++慢,
 2.Java为纯面向对象语言,所有代码(包含函数、变量等)必须在类中实现,除基本数据类型(包含int、float等)外,所有类型都是类。此外,Java语言中不存在全局变量或全局函数,而C++兼具面向过程编程的特点,可以定义全局变量和全局函数。
 3.与C/C++语言相比,Java语言中没有指针的概念,这有效防止了C/C++语言中操作指针可能引起的系统问题,从而使程序变得更加安全。
 4.与C++语言相比,Java语言不支持多重继承,但是Java语言引入了接口的概念,可以同时实现多个接口。由于接口也具有多态特性,因此在Java语言中可以通过实现多个接口来实现与C++语言中多重继承类似的目的。
 5.在C++语言中,需要开发人员去管理对内存的分配(包含申请与释放),而Java语言提供了垃圾回收器来实现垃圾的自动回收,不需要程序显示地管理内存的分配。在C++语言中,通常都会把释放资源的代码放到析构函数中,Java语言中虽然没有析构函数,但却引入了一个finalize()方法,当垃圾回收器将要释放无用对象的内存时,会首先调用该对象的finalize()方法,因此,开发人员不需要关心也不需要知道对象所占的内存空间何时会被释放。
 6.C++语言支持运算法重载,而Java语言不支持运算符重载。C++语言支持预处理,而Java语言没有预处理器,虽然不支持预处理功能(包含头文件、宏定义等)、但它提供的import机制与C++中的预处理功能类似。
 7.待续...
三.为什么需要public static void main (String[] args) 这个方法
答案:该方法为程序的入口方法,JVM在运行程序时,会首先查找main()方法。
四.如何实现在main()方法执行前输入"Hello World"
答案:静态块在类被加载时就会被调用。所以利用静态块实现输出"Hello World"的功能。
五.Java程序初始化的顺序是怎么样的?
答案:①静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量可能会初始化多次)。
②父类优先于子类进行初始化。
③按照成员变量的定义顺序进行初始化。
总结:先父后字,先静(静态)后非(非静态),先执行后构造;
执行顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。
6.Java的作用域有哪些
在Java语言中,变量的类型主要有3种:成员变量、静态变量和局部变量。

成员变量:类的成员变量的作用与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。
静态变量:被static修饰的成员变量被称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖与特定的实例,而是被所有实例所共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配存储空间。因此,就可以通过类和变量名来访问静态变量。
局部变量:局部变量的作用域与可见性为它所在的花括号内。

成员变量的四种作用域

作用域与可见性当前类同一package子类其他package
public
private×××
protected×
default××
1)public。表明该成员变量或方法对所有类或对象都是可见的,所有类对象都可以直接访问。
2)private。表明该成员变量或方法是私有的,只有当前类对其具有访问权限,除此之外的其他类或者对象都没有访问权限。
3)protected。表明成员变量或方法对该类自身,与它在同一个包中的其它类,在其它包中的该类的子类都可见。
4)default。表明该成员变量或方法只有自己和与其位于同一包内的类可见。若父类与子类位于同一包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类位于不同的package(包)内,则没有访问权限。
需要注意的是,这些修饰符只能修饰成员变量,不能用来修饰局部变量。private与protected不能用来修饰类(只有public、abstract或final能用来修饰类)。
七、一个Java文件中是否可以多个类
一个Java文件中可以定义多个类,但是最多只能有一个类被public修饰,并且这个类的类名与文件名必须相同,若这个文件中没有public的类,则文件名随便是一个类的名字即可。
八、什么是构造函数
1.构造函数必须与类的名字相同,并且不能有返回值(返回值也不能为void)。
2.每个类可以有多个构造函数。当开发人员没有提供构造函数时,编译器在把源代码编译成字节码的过程中会提供一个没有参数默认的构造函数,但该构造函数不会执行任何代码。如果开发人员提供了构造函数,那么编译器就不会再创建默认的构造函数。
3.构造函数可以有0个、1个或1个以上的参数。
4.构造函数总是伴随着new 操作一起调用,且不能由程序的编写者直接调用,必须要由系统调用。构造函数在对象实例化时会被自动调用,且只运行一次;而普通的方法是在程序执行到它时被调用,且可以被该对象调用多次。
5.构造函数的主要作用是完成对象的初始化工作。
6.构造函数不能被继承,因此,它不能被覆盖,但是构造函数能够被重载,可以使用不用的参数个数或参数类型来定义多个构造函数。
7.子类可以通过super关键字来显式地调用父类的构造函数,当父类没有提供无参数的构造函数时,子类的构造函数中必须显式地调用父类的构造函数。如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显式地调用父类的构造函数,在这种情况下编译器会默认调用父类提供的无参数的构造函数。
8.当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数。此外,默认构造器的修饰符只跟当前类的修饰符有关。
九、为什么Java中有些接口没有任何方法
由于Java不支持多重继承,即一个类只能有一个父类,为了客服单继承的缺点,Java语言引入了接口这一概念。接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类。接口中只包含方法的定义,没有方法的实现。接口中所有方法都是抽象的。接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰。由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接达到多重继承的目的。
在Java语言中,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。这个标签类似于汽车的标志图标,每当人们看到一个去汽车的标志图标时,就能知道这款汽车的品牌。Java类库中已存在的标识接口有Cloneable和Serializable等。在使用时会经常用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。
十、Java中的clone方法有什么作用?
Java中所有类默认都继承自Object类,而Object类中提供了一个clone()方法。这个方法的作用是返回一个Object对象的复制。这个复制函数返回的是一个新的对象而不是一个引用。
1.实现clone的类首先需要继承Cloneable接口。Cloeable接口实质上是一个标识接口,没有任何接口方法。
2.在类中重写Object类中的clone()方法。
3.在clone方法中调用super.clone()。无论clone类的继承结构是什么,super.clone()都会直接或间接调用java.lang.Object类的clone()方法。
4.把浅复制的引用指向原型对象新的克隆体。
十一、什么是反射机制
反射机制是Java语言中一个非常重要的特性,它允许在运行时进行自我检查,同时也允许对其内部的成员进行操作。虽然这个特性在实际开发时使用得差不多,但是像Pascal、C和C++等语言根本就没有提供这样的特性。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会严重影响系统的性能。
具体而言,反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。
十二、package有什么作用
宗旨:把.java文件(Java源文件)、.class文件(编译后的文件)以及其他resource文件(例如.xml文件、.avi文件、.mp3文件、.txt文件等)有条理地进行一个组织,以供使用。
1.提供多层命名空间,解决命名冲突,通过使用package,使得处于不同package中的类可以存在相同的名字。
2.对类按功能进行分类,使项目的组织更加清晰。
十三、如何实现类似于C语言中函数指针的功能
先定义一个接口,然后在接口中声明要调用的方法,接着实现这个接口,最后把这个实现类的一个对象作为参数传递给调用程序,调用程序通过这个参数来调用指定的函数,从而实现回调函数的功能。
十四、面向对象与面向过程有什么区别
面向对象是把数据以及对数据的操作方式放在一起,作为一个相互依存的整体,即对象。对同类对象抽象出其共性,即类,类中的大多数数据,只能被本类的方法进行处理。
面向过程是一种以事件为中心的开发方法,就是自顶向下顺序执行,逐步求精,其程序结构是按功能划分为若干个基本模块。
1.出发点不同。面向对象方法是用符合常规思维的方式来处理客观世界的问题,强调把问题域的要领直接映射到对象及对象之间的接口上。而面向过程方法强调的则是过程的抽象化与模块化,它是以过程为中心构造或处理客观世界问题的。
2.层次逻辑关系不同。面向对象方法则是用计算机逻辑来模拟客观世界中的物理存在,以对象的集合类作为处理问题是基本单位,尽可能地使计算机世界向客观世界靠拢,以使问题的处理更清晰直接,面向对象方法是用类的层次结构来体现类之间的继承和发展。而面向过程方法处理问题的基本单位是能清晰准确地表达过程的模块,用模块的层次结构概括模块或模块间的关系与功能,把客观世界的问题抽象成计算机可以处理的过程。
3.数据处理方式与控制程序方式不同。面向对象方法将数据与对应的代码封装成一个整体,原则上其他对象不能直接修改其数据,即对象的修改只能由自身的成员函数完成,控制程序方式上是通过"事件驱动"来激活和运行程序。而面向过程方法是直接通过程序来处理数据,处理完毕后即可显示处理结果,在控制程序方式上是按照设计调用或返回程序,不能自由导航,各模块之间存在着控制与被控制、调用与被调用的关系。
4.分析设计与编码转换方式不同。面向对象方法贯穿于软件生命周期的分析、设计及编码中,是一种平滑过程,从分析到设计再到编码是采用一致性的模型表示,即实现的是一种无缝连接。而面向过程方法强调分析、设计及编码之间按规则进行转换,贯穿于软件生命周期的分析、设计及编码中,实现的是一种有缝的连接。
十五、面向对象有哪些特征
1)抽象。抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包含两个方面:一是过程抽象;二是数据抽象。
2)继承。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类哪里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更适合特殊的需要。
3)封装。封装是指客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
4)多态。多态是指允许不同类的对象对同一消息作为响应。多态包括参数化多态和包含多态。多态性语言具有灵活、抽象、行为共享、代码共享等优势,很好地解决了应用程序函数同名问题。
十六、面向对象的开发方式有什么优点?
1)较高的开发效率。采用面向对象的开发方式,可以对现实的事物进行抽象,可以把现实的事物直接映射为开发的对象,与人类的思维过程相似,例如可以设计一个Car类来表示现实中的汽车,这种方式非常直观明了,也非常接近人们的正常思维。同时,由于面向对象的开发方式可以通过继承或者组合的方式来实现代码的重用,因此可以大大地提高软件的开发效率。
2)保证软件的鲁棒性。正是由于面向对象的开发方法有很高得重要性,在开发的过程中可以重用已有的而且在相关领域经过长期测试的代码,因此,自然而然地对软件的鲁棒性起到了良好的促进作用。
3)保证软件的高可维护性。保证软件的高可维护性。由于采用面向对象的开发方式,使得代码的可读性非常好,同时面向对象的设计模式也使得代码结构更加清晰明了。同时针对面向对象的开发方式,已有许多非常成熟的设计模式,这些设计模式可以使程序在面对需求的变更时,只需要修改部分的模块就可以满足需求,因此维护起来非常方便。
十七、什么是继承?
继承是面向对象中的一个非常重要的特性。通过继承,子类可以使用父类中的一些成员变量和方法,从而能够提高代码的复用性,提高开发效率。在Java语言中,被继承的类叫基类(superclass)或父类,继承基类或父类的类叫派生类或子类(subclass)。继承是通过extends关键字来实现的,使用格式为:class子类名extends父类名。
继承主要有如下几个特性:
1.Java语言不支持多重继承,也就是说,子类至多只能有一个父类,但是可以通过实现多个接口来达到多重继承的目的。
2.子类只能继承父类的非私有(public与protected)成员变量与方法。
3.当子类中定义的成员变量和父类中定义的成员变量同名时,子类中的成员变量会覆盖父类的成员变量,而不会继承。
4.当子类中的方法与父类中的方法有相同的函数签名(相同的方法名,相同的参数个数与类型)时,子类将会覆盖父类的方法,而不会继承。
十八、组合和继承有什么区别
组合和继承是面向对象中两种代码复用的方式。组合是指在新类里面创建原有类的对象,重复利用已有类的功能。继承是面向对象的主要特性之一,它允许设计人员根据其他类的实现来定义一个类的实现。组合和继承都允许在新的类中设置子对象(sunobject),只是组合是显示的,而继承是隐式的。组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应。
1)除非两个类之间是"is-a"的关系,否则不要轻易地使用继承,不要单纯地为了实现代码的重用而使用继承,因为过多地使用继承会破坏代码的可维护性,当父类被修改时,会影响到所有继承它的子类,从而增加程序的维护难度与成本。
2)不要仅仅为了实现多态而使用继承,如果类之间没有"is-a"的关系,可以通过实现接口与组合的方式来达到相同的目的。设计模式中的策略模式可以很好地说明这一点,采用接口与组合的方式比采用继承的方式具有更好的可扩展性。
由于Java语言只支持单继承,如果想同时继承两个类或多个类,在Java中是无法直接实现的。同时,在Java语言中,如果继续使用太多,也会让一个class里面的内容变得臃肿不堪。所以,在Java语言中,能使用组合就尽量不要使用太多继承。
十九、多态的实现机制是什么?
1)方法的重载(overload)。重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。
2)方法的覆盖(override)。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。在Java语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象。而程序调用的方法在运行期才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称为运行时多态。
二十、重载和覆盖有什么区别 二十一、抽象类(abstract class)与接口(interface)有什么异同 二十二、内部类有哪些

如何获取父类的类名
this与super有什么区别
变量名有哪些规则
break、continue以及return有什么区别
final、finally和finalize有什么区别
assert有什么作用
static关键字有哪些作用
使用switch时有哪些注意事项
volatile有什么作用
instanceof有什么作用
strictfp有什么作用
Java提供了哪些基本数据类型
什么是不可变类
值传递与引用传递有哪些区别
不同数据类型的转换有哪些规则
强制类型转换的注意事项有哪些
运算符优先级是什么
Math类中round、ceil和floor方法的功能各是什么
++i与i++有什么区别
如何实现无符号数的右移操作
char型变量中是否可以存储一个中文汉字
字符串创建与存储的机制是什么
“==”、equals和hashCode有什么区别
String、StringBuffer、StringBuilder和StringTokenizer有什么区别
Java中的数组是不是对象
数组的初始化方式有哪几种
length属性与length()方法有什么区别
finally块中的代码什么时候被执行
异常处理的原理是什么
运行时异常和普通异常有什么区别
JavaIO流的实现机制是什么
管理文件和目录的类是什么
Java Socket是什么
Java NIO是什么
什么是Java序列化
System.out.println()方法使用需要注意那些问题
为什么说Java是平台独立性语言
Java平台与其他语言平台有哪些区别
JVM加载class文件的原理机制是什么
什么是GC
Java是否存在内存泄漏问题
Java中的堆和栈有什么区别
Java Collections框架是什么
什么是迭代器
ArrayList、Vector和linkedList 有什么区别
HashMap、Hashtable、TreeMap和WeakHashMap有哪些区别
用自定义类型作为HashMap或Hashtable的key需要注意哪些问题
Collection和Collections有什么区别
什么是线程?它与进程有什么区别?为什么要使用多线程
同步和异步有什么区别
如何实现Java多线程
run()方法与start()方法有什么区别
多线程同步的实现方法有哪些
sleep()方法与wait()方法有什么区别
终止线程的方法有哪些
synchronized与Lock有什么异同
什么是守护线程
join()方法的作用是什么
如何通过JDBC访问数据库
JDBC处理事务采用什么方法
Class.forName的作用是什么
Statement、PreparedStatement和CallableStatement有什么区别
getString()方法与getObject()方法有什么区别
使用JDBC时需要注意哪些问题
什么是JDO
JDBC与Hibernate有什么区别

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343742.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号