java基础

java基础:

一、面向对象的特征:封装,继承和多态

1、封装:防止该类的代码和数据被外部类定义的代码随机访问。

优点:修改自己的实现代码,而不用修改哪些调用我们代码的程序片断。

2、继承(extends ):继承就是子类从父类继承方法,使得子类具有父类相同的特征和行为。

特点:

        1).子类拥有父类非private的属性、方法

        2).子类可以拥有自己的属性和方法,即子类可以对父类进行扩展

        3).子类可以用自己的方式实现父类的方法

        4).Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类

注: final关键字

        final关键字声明类可以把类定义为不能继承的,即最终类,用于修饰方法,该方法不能被子类重写。

3、多态:多态体现为父类引用变量可以指向子类对象。 

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

                    继承、重写、父类引用指向子类对象

      特点:Fu f = new Zi();

             1)、多态成员变量:编译运行看左边

             2)、多态成员方法:编译看左边,运行看右边

        注:instanceof关键字

              Java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。

              作用:用来判断某个对象是否属于某种数据类型。

二、常见的RuntimeException(运行时异常): 
              IndexOutOfBoundsException(下标越界异常) 
              NullPointerException(空指针异常) 
              NumberFormatException (String转换为指定的数字类型异常) 
              ArithmeticException -(算术运算异常 如除数为0) 
              ArrayStoreException - (向数组中存放与声明类型不兼容对象异常) 

三、String、StringBuilder、StringBuffer区别

       String被final修饰,值是不可变的,每次对String的操作都会生成新的对象,效率低下,而且浪费大量的内存空间

       StringBuffer是可变类,不会产生新的对象,线程安全,多线程操作字符串  

       StringBuilder是可变类,不会产生新的对象,线程不安全,单线程操作字符串

四、重载和重写的区别

       方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

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

       重写发生在子类与父类之间,重写要求子类的方法与父类被重写方法有相同的参数列表,有兼容的返回类型,不能比父类被重写方法声明更多的异常(里氏代换原则)。

       注:重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

五、抽象类和接口的区别

              1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract方法;

         2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

         3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

         4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

六、反射 

       定义:反射是java语言的特征之一,允许动态地发现和绑定类、方法、字段,通过反射,能够在需要时完成创建实例、调用方法和访问字段的工作

       用途:

                在运行时判断任意一个对象所属的          

                       在运行时构造任意一个类的对象

                       在运行时判断任意一个类所具有的成员变量和方法

                      在运行时调用任意一个对象的方法,通过反射甚至可以调用到private修饰的方法

                      生成动态代理

     反射的使用:   

                      Spring 框架的 IOC 基于反射创建对象和设置依赖属性。

        Spring MVC 的请求调用对应方法,也是通过反射。

        JDBC 的 Class#forName(String className) 方法,也是使用反射。

注:

            java文件编译后变成class文件,class文件被类加载器加载到内存中,并且JVM根据其字节数组创建了对应的Class对象。

           Class类是Java反射的起源,针对任何一个我们想使用的类,只有先为它产生一个Class对象,接下来就可以通过Class对象获取其他的信息。

           JVM为每个类管理着一个独一无二的Class对象,当我们需要创建每个类的对象时,JVM会检查所要加载的类对应的Class对象是否已经存在。不存在,则JVM会根据类加载机制加载并创建对应的Class对象,最后使用Class对象创建出我们通常使用的实例对象。

六、GET和POST区别

       1)、GET把参数包含在URL中,POST通过request body传递参数。

       2)、GET请求在URL中传送的参数是有长度限制的,而POST没有。

       3)、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

       4)、GET请求会被浏览器主动cache,而POST不会,除非手动设置。

       5)、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

       6)、GET发送一次请求,而POST则需要发送两次请求。

       注:

                    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

                    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

                    并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

七、Session与Cookie

       区别:Cookie保存在客户端浏览器中,Session保存在服务器端(cookie是在客户端保持状态,而session是在服务器端保持状态)

       Cookie机制:cookie的内容主要包括name(名字)、value(值)、maxAge(失效时间)、path(路径),domain(域名)和secure

       Session机制:服务端使用散列表保存信息,当程序需要为客户端的一个请求创建session的时候,首先需要去判断这个客户端请求中是否已包含了一个session标识--sessionID,                       

                                      如果已经包含一个sessionID,则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用,

                                      如果客户端请求不包含sessionID,则为此客户端创建一个session并且声称一个与此session相关联的sessionID,这个sessionID将被在本次响应中返回给客户端保存。

                缺点:

                        Cookie:cookie可以被用户禁止;不安全;只能保存少量数据;只能保存字符串

                        Session:session是借助cookie来实现的,cookie被禁止,session也被禁止;当用户访问量很大时,对服务器压力大

八、equals 和 == 的区别

       基本数据类型比较(string 除外), == 和 Equals 两者都是比较值;

               引用类型:没有重写equals方法时,用equals 和 == 进行比较的时候,比较的是他们在内存中的存放地址

               注:重写equals,必须重写hashcode方法

九、序列化和反序列化,如何实现序列化?

       序列化:把对象转换为字节序列的过程称为对象的序列化

       反序列化:把字节序列恢复为对象的过程称为对象的反序列化

       序列化的实现:实现Serializable接口

              对象的序列化的用途:

                     1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

                     2) 在网络上传送对象的字节序列。

十、String常用方法整理:

    substring(int start)  参数:start:要截取位置的索引  返回: 从start开始到结束的字符串
    
    注:如果start大于字符串的长度将会抛出越界异常
    
    substring(int beginIndex, int endIndex)  参数:beginIndex 开始位置索引  endIndex    结束位置索引  返回:从beginIndex位置到endIndex位置内的字符串
    
    注:如果startIndex和endIndex其中有越界的将会抛出越界异常
    
    indexOf(num)
        作用:从数组开头向后开始查找目标数所在的位置,然后返回它的索引值。
        未查找到返回-1
        
    indexOf(num1,num2)
        作用:在数组里面从num2往后开始查找num1,并返回num1在数组里正常的位置
        未查找到返回-1
        
    lastIndexOf(num)
        作用:从数组后面开始往前查找第一次出现的目标数,并且返回它正常的索引值
        未找到返回-1
        
    lastIndexOf(num1,num2)
        作用:从num2开始查找num1最后出现的位置
        未找到返回-1

                           

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值