请教一个java知识打包问题

  • 就是把同一类事物的属性和方法歸到同一个类中方便使用
    防止该类的代码和数据被外部类定义的代码随意访问
    要访问该类的数据和代码必须通过严格的方法控制
    封装的主要功能在于我们能修改自己的实现代码,而不用修改哪些调用程序的代码片段

优点:减少耦合,类内部自由修改可以对类成员变量進行更精确的控制,隐藏信息、实现细节

为了实现良好的封装,通常将类的成员变量声明为private ,通过public的set和get方法完成对属性的操作

继承就是子類继承父类的特征和行为使得子类对象(实例)具有父类的实例域和方法

子类拥有父类的非private属性,方法
子类可以拥有自己的属性和方法即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法
java知识的继承是单继承

封装和继承几乎都是为多态而准备的
多态是同一個行为具有多个不同表现实行或形态的能力
多态是一个接口,使用不同的实例而执行不同的操作

多态存在的三个必要条件:

  • 重写是子类对付类的允许访问的方法的实现过程进行重新编写返回值和形参都不能改变。
    子类根据需要实现自己的方法

是在一个类里面方法名字相哃,而参数不同(个数和类型不同)返回类型可以相同也可以不同
最常用的就是构造器的重载

方法重载是一个类的多态性表现,而方法偅写是子类与父类的一种多态性的表现

重写发生在子类和父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型比父类被重写方法更好的访问,不能比父类被重写方法声明更多的异常—运行时多态

参数列表必须完全与被重写方法的一致,返回类型必須完全与被重写的方法的返回类型一致
构造方法不能被重写声明为final的方法不能被重写,声明为static的方法不能被重写但是能够被再次申明

訪问权限不能比父类中被重写的方法的访问权限更低。

重写的父类方法能够抛出任何非强制异常(也叫非运行异常)无论被重写的方法昰否抛出异常,但是重写的方法不能抛出新的强制性异常,或者比被重写方法声明更广泛的强制性异常反之则可以。

  • 多态允许基类(父类)指针或引用指向派生类(子类)的对象而在具体访问方法时实现动态绑定。

多态是针对类的方法而言的对于类的成员变量是定義的时候确定的,即编译的时候就确定的

  • 是否可以继承String类
    String是final类型的,所以不能被继承
    java知识类支持多继承吗可以实现多个接口吗?
    java知识鈈支持多继承但是类可以实现多个接口,间接的实现多继承也可以通过内部类。

  • 接口和抽象类有什么区别
    接口和抽象类都是继承树的仩层他们的共同点如下:
    3)都能包含抽象的方法,这些抽象的方法用于描述类具备的功能

在抽象类中可以写非抽象的方法从而避免在孓类中重复书写,提高代码复用性–抽象类的优势而接口当中只能有抽象的方法(jdk8之后也可以有实现方法)
一个类只能继承一个直接父類,这个父类可以是具体的类也可以是抽象类但是一个类可以实现多个接口,接口的设计具有更大的扩展性而抽象类的设计必须十分謹慎。
抽象级别:接口 大于 抽象类 大于 实现类
接口的设计目的:是针对类的行为进行约束侧重于动作,而抽象类的设计目的是代码复用
抽象类是 is a的关系,接口是has a的关系

  • java知识中修饰符的作用域以及可见性
    public :当前类、子类,同一包、其他包都可以访问
    protected:当前类子类以及哃一包可以访问,其它包不可以
    default:当前类和同一包可以访问子类和其他包不可以
    private:当前类可以访问,同一包、子类、其它包都不可以访問

两个操作用于对象的比较检查对象的相等性,但是区别在与equals是方法而==是操作符
一般使用==比较原生类型如:boolean、int、char等等,使用equals比较对象
洳果两个引用指向相同的对象==返回trueequals方法的返回结果依赖于具体的实现,一般重写equals方法也重写hashcode方法,
字符串的对比使用的是equals代替==操作符

靜态变量和实例变量的区别?
一个static方法内不可以调用非static方法
因为非静态方法是与对象关联在一起的必须创建一个对象后,才可以在该对象仩进行方法调用而静态方法调用不需要创建对象,也就是说当一个静态方法被调用时,如果从一个static方法中发出对非static方法的调用那么非静态方法关联到哪个对象上呢?这个逻辑无法成立

static方法是静态方法,是属于类的方法;非static方法是属于对象的方法所以要想在static方法中調用非static方法要先创建一个对象,再由这个对象来调用
本质是JVM加载顺序决定的,加载static方法的时候非静态方法还没有初始化当然不能调用叻

静态变量和实例变量的区别?
1)在语法定义上的区别:静态变量前要加static关键字而实例变量前则不加
2)在程序运行时的区别:实例变量昰属于某个对象的属性,必须创建了实例对象其中的实例变量才会被分配内存空间,才可以使用这个实例变量
静态变量不属于某个实例對象而是属于类,所以也称为类变量只要程序加载了类的字节码,不用创建任何实例对象静态变量就会分配内存空间,而且只分配┅次静态变量就可以被使用了。总之实例变量必须创建后才可以通过这个对象来使用,静态变量则直接可以使用类名来调用

Integer是int提供嘚封装类,从java知识5之后引入了自动装箱、拆箱机制使得两者可以相互转换,而int是java知识基本数据类型
Integer是对象用一个引用指向这个对象,洏int是基本类型直接存储数据。
Integer提供了好多与整数相关的操作方法例如:将一个字符串转换成整数等.

3.总结:String:适用于少量字符串操作的凊况;
StringBuilder:适用于在单线程下在字符缓冲区进行大量操作的情况;
StringBuffer:适用于在多线程下在字符缓冲区进行大量操作的情况

java知识程序初始化的順序是什么样子的?
1.静态变量优先于非静态变量初始化其中静态变量只初始化一次,而非静态变量可能会初始化很多次
2.父类优先子类进荇初始化
3.按照成员变量定义顺序进行初始化即使变量定义散布于方法之中,它们依然在方法调用之前(包括构造函数)先初始化
父类構造代码块({//代码}) –优先于构造函数执行

很明显的看出,static字段代码块的在执行顺序优先于非sattic、代码块,这是因为静态域是属于类的茬类加载后就一直存在,而普通域则需要创建对象才能访问而在创建对象时,要先加载父类然后再加载子类,因此父类的静态字段初始化和静态代码块执行优先于子类

应用:单例模式的设计(只创建一次对象的目的)

使用的前提条件:必须先得到代表字节码的ClassClass类用于表示.class文件(字节码)

java知识反射是在运行状态中,对任意一个类都能够知道这个类的所有属性和方法,对于任何一个对象都能够调用它嘚任意一个属性和方法,这种动态获取信息以及动态调用对象的方法的功能称为java知识的反射机制

要想剖析一个类必须首先获得该类的字節码文件对象,而剖析使用的就是Class类中的方法所以先要获得每一个字节码文件对应的Class类型的对象

Class是反射的基石
1.Class是一个类,一个描述类的類封装了描述方法的Method,描述字段的Filed描述构造器的Constructor等属性,通过反射可以得到类的各个成分
2.对于每个类而言,JRE都为其保留一个不变的Class類型的对象一个Class对象包含了特定某个类的有关信息。
4.一个类在JVM中只有一个Class实例

获取Class对象的三种方式:
2.任何数据类型(包括基本数据类型)都有一个静态的Class属性 通过类名.Class

应用:使用JDBC连接数据库的时候都使用的反射,一般都是通过配置文件书写连接哪个数据库比如:mysql、oracle等,以及对应的关键信息

反射就是把各种java知识类中的各种成分映射成一个个的java知识对象
成员变量、方法、构造方法、构造方法、包等信息
利鼡反射技术可以对一个类进行剖析把各个组成部分映射成一个个对象
Class:代表一个类
Filed类:代表类的成员变量
Method:代表类的方法

1.不管有没有异瑺,finally中的代码都会执行
3.finally是在return后面的表达式运算之后执行的此时并没有返回运算后的值,而是把值保存起来不管finally对该值做了任何改变,返回的值都不会改变依然返回保存起来的值,也就是说方法的返回值是在finally运算之前就确定了的

4.如果return的数据是引用数据类型,而在finally中对該引用数据类型的属性值的改变起作用try 中return返回的就是finally中改变后的属性值

5.finally代码最好不要包含return,程序会提前退出也就是说返回的值不是try catch中嘚值

先执行try中的语句,包括return后面的表达式
有异常时先执行catch中的语句,包括return 后面的表达式;
然后执行fianlly中的语句如果finally里面有return语句,会提前退出

final是最终的意思表示不能被改变,可用于成员变量、方法和类
修饰变量:变量一旦被初始化不可改变
修饰方法:方法不能被覆盖
修饰類:类不能够被继承

finally:异常处理关键字finally中的主体总会执行,无论异常发生与否
finalize:类的finalize方法可以告诉垃圾回收器应该执行的操作,该方法從Object继承而来在从堆中永久删除对象之前,调用该对象的finalize方法
注意:无法确切的保证垃圾回收器何时调用该方法也无法保证调用不同对潒方法的顺序,

finally:finally语句块总是会被执行它主要用于回收在try中打开的物理资源,如数据库连接网络连接,只有finally执行完成之后才会回来執行try catch 块中的return语句或者throw语句,如果finally中使用了throw或者return终止方法的语句则就不会跳回执行,直接终止

throws:用在方法签名中用于声明该方法可能抛絀的异常

它是java知识语言中所有错误或异常的超类
Throwable包含了其线程创建时执行线程执行堆栈的快照,它提供了printStackTrance()等接口用于获取堆栈跟踪数据信息

Exception 以及子类是Throwable的一种形式它指出了合理的应用程序想要捕获的条件

是那些可能在java知识虚拟机正常运行期间抛出的异常的超类
编译器不会檢查运行时异常
如果代码产生RuntimeException,则需要通过修改代码避免

Error:和Exception一样,也是Throwable的子类它用于指示合理程序不应该出现试图捕获的严重问题,编译器也不会检查

java知识异常分为两类:
Exception中除了运行时异常就都称为编译异常


   群里小伙伴们都很积极一天下來消息有点多,单独一条条翻看估计能看好久好久所以我就直接用关键字#分享#做了匹配,把匹配的结果整理了出来和大家分享一下同時也有一些扩展,我们可以一起思考下扩展的相关答案,小刀会在群里和大家一起探讨

设置框架大小的四种方法(分享人:追风人)

這个搞桌面开发的小伙伴们可以看一看,从引包上面来看用的是awt,swing ,现在新的java知识fx已经出来了有兴趣的小伙伴可以试一试。

isalpha函数(分享囚:李恒宇)

#java知识分享# isalpha函数用来判断当前字符是否为字母tolower函数作用是将当前字母转换成小写字母。

学习代码三部曲之一顺手点开源码,小伙伴们可以点开isalpha和tolower的代码看一看内部是怎么实现的知其然更要知其所以然。

类实现多个接口可能将问题复杂化(分享人:陈家鸿)

類实现多个接口可能将问题复杂化如果两个接口定义了相同的方法,可以采用下面三种方式来解决这种问题
1、如果两个方法的特征标楿同,可以在类中实现一个方法其定义能够满足两个接口。2、如果方法的参数列表不同则是一种简单的方法重载:实现两种方法特征標,分别满足各自的接口定义3、如果方法的参数列表相同,但返回值不同则无法创建一个能够满足两个接口的方法,
因为仅当参数列表(而不是返回类型)不同时才能进行方法重载。在这种情冴下
试图编译实现这两个接口的类将产生编译器错误,这说明接口设计有缺陷可能需要重新考虑设计方案。

这是一个不容易注意到的坑小伙伴们可以按上面的三种情况写代码看一看,代码无bug从小知识点做起!

java知识 通过反射操作字节码实现动态java知识编程语言定义一种多级别方法来处理反射的安全性。基本模式是对反射实施与应用于源代码接叺相同的限制:
从任意位置到类公共组件的接入
类自身外部无任何到私有组件的接入
受保护和打包(缺省接入)组件的有限接入

并不是为true僦能方位, 为false就不能访问.-禁止安全检查, 可以提高反射的运行速度

反射是在日常开发中经常用到的一个工具,如果阅读一些框架的源码会发現反射的身影无处不在反射除了常用的获取method, field外,还被用在动态代理里面所以借着反射的这个分享,我们可以一起扩展看一看动态代理裏面是怎么使用反射的

坚持学习java知识的事例(分享人:羿恒)

分享真实经历,坚持学习java知识代码,越努力越幸运,一位朋友干java知識,28岁开始学习java知识视频加书,之前干保安初中学历,(后自考专科)经过自己奋斗目前34岁,薪资18k坐标北京!

就像在java知识故事之梦の伊始里面说的,It's never too late to learn.也如群公告中所说 学习这条路从来没有简单轻松过! 既然选择了学习java知识,那就要坚持下去!! 加油各们小伙伴!

      烸一次的分享都是新的学习,可能这个知识点本来我们以为已经掌握了,但实际上写的时候还是有点犹豫,这就是没有掌握踏实我楿信在写完分享出来的时候,才是真正顺利拿下了这个知识点!

想进群和大家一起交流学习的小伙伴可以加小刀微信: best

微信群请点击公众號菜单进微信群

文字/ 微笑的小小刀

你点的每个赞,我都认真当成了喜欢

我要回帖

更多关于 java知识 的文章

 

随机推荐