Java总结(basic、oop)

8 篇文章 0 订阅

不间断更新。。。。

 

1.对象和类:

现实世界是由很多的对象组成的,基于对象抽出了类

对象:真实存在的单个的个体。

类:同一类型对象的总称。

 

2.Java内存管理:通过JVM来管理

    1)堆

          1.1)用于存储所有new出来的对象(包括成员变量)

          1.2) 垃圾:没有任何引用所指向的对象。

                    垃圾回收器(GC):不定时到内存中清理垃圾。

                    回收过程是透明的,不一定一发现垃圾就立即回收。

                    调用System.gc()可以建议虚拟机快速调度GC来回收。

          1.3)内存泄漏:不再使用的内存没有被及时的回收

                            建议:对象不再使用时应该及时将引用设置为null。

          1.4)成员变量的生命周期:

                            创建对象时存储在堆中,对象被回收时一并被回收。

          2)栈:

            2.1)存储正在调用的方法中的所有局部变量(包括参数)

            2.2)调用方法中在栈中为该方法分配一块对应的栈帧,栈帧中存储方法中的所有局部变量(包括参数),

方法执行结束时,栈帧被清除,局部变量一并被清除。

    2.3)局部变量的生命周期:

      调用方法中存在栈中,方法结束时与栈帧一并被清除。

 

          3)方法区:
            3.1)存储.class字节码文件(包括方法)

    3.2)方法只有一份,通过this来区分具体的对象。


  1)什么是类?什么是对象?
  2)如何创建类?如何创建对象?如何访问类中的成员?
  3)引用类型之间画等号
  4)null和NullPointerException

  1)方法的重载:
  2)构造方法:
  3)this:
  4)引用类型数组:

  1)内存管理:
  2)继承:
  3)super:
  4)向上造型:

  1)方法的重写
    重写与重载的区别
  2)package和import
  3)访问控制修饰符
  4)static
  5)final
  6)static final

  1)抽象方法
  2)抽象类
  3)接口
  4)接口与抽象类的区别

  1)多态: 意义、向上造型、强转、instanceof

  2)成员内部类、匿名内部类

 

1、Java支持的数据类型有哪些?什么是自动拆装箱?
Java语言支持的8中基本数据类型是:byte、short、char、int、long、float、double、boolean
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。




2、Java有没有 goto?
答:java中的保留字,现在没有在java中使用。


3、char型变量中能不能存贮一个中文汉字,为什么?
答:char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),
一个char类型占2个字节(16比特),所以放一个中文是没问题的。


4、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。 


5、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,
从Java 7开始,expr还可以是字符串(String),
但是长整型(long)在目前所有的版本中都是不可以的。


6、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。
而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;
相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。


7、float f=3.4;是否正确?
答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,
因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。


8、请说出作用域 public ,protected,private,以及不写时的区别。
这四个作用域的可见范围如下表所示。 
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。
作用域  当前类  同一package  子孙类  其他package 
public    √          √          √        √ 
protected √          √          √        × 
默认的    √          √          ×        × 
private   √          ×          ×        ×


9、int和Integer有什么区别?
答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,
但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),
int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:
- 原始类型: boolean,char,byte,short,int,long,float,double
- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double


10、面向对象有哪些特征?
答:面向对象有三大特性:封装,继承,多态  
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。
在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,
以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。




所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:
它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,
被继承的类称为“基类”、“父类”或“超类”。继承的过程,
就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:
实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;




所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。


11、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。


重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;


重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,
不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。

  1)重写(Override):
            1.1)发生在父子类中,方法名称相同,参数列表相同,方法体不同。
    1.2)遵循"运行期绑定",看对象的类型调用方法。
      2)重载(Overload):
            2.1)发生在同一类中,方法名称相同,参数列表不同,方法体不同
    2.2)遵循"编译期绑定",看引用的类型绑定方法。
---------------------
作者:@Within
来源:CSDN
原文:https://blog.csdn.net/qq_41264674/article/details/80337769?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!


12、是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。
如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。


13、静态方法中能否使用this和super关键字?为什么?
不能,因为static方法在Java中是属于类的,类被Java虚拟机加载的时候,就会加载static方法,而this和super是属于对象的,在类的实例被创建后才会存在。
因此在加载静态方法时,
方法中使用了this和super关键字,就会有编译错误。


14、构造器(constructor)是否可被重写(override)?
答:构造器不能被继承,因此不能被重写,但可以被重载。




15、下面的代码有什么不妥之处? 
 1. if(username.equals(“zxx”)){} 
 2. int x = 1; 
return x==1?true:false; 
答:1、username可能为null,如果username==null,在调用equals方法时,会产生空指针异常,如果写成“zxx”.equals(username)则可以避免此类问题。
2、x==1是逻辑表达式,表达式的结果本身就是boolean类型,因此无需再用三目运算表达式进行计算。


16、&和&&的区别?(&非短路运算并且运算符可以是int &&短路运算并且运算符必须是boolean型)
答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,
虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,
如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例
如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),
二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。


17、GC是什么?为什么要有GC?
答:GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,
Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,
但JVM可以屏蔽掉显示的垃圾回收调用。
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,
不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。


18、Java支持多继承么?
不支持,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。




19、Java 中会存在内存泄漏吗,请简单描述。
答:理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);
然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。例如hibernate的Session(一级缓存)中的对象属于持久态,
垃圾回收器是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭(close)或清空(flush)一级缓存就可能导致内存泄露。


20、接口和抽象类的区别是什么?
Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。


21、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
答:接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。


22、一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?
答:可以,但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致。


23、什么是值传递和引用传递?


   对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。


   对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。


24、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
答:可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调。


25、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
答:一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员。


26、Java 中的final关键字有哪些用法?
答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值