zoukankan      html  css  js  c++  java
  • java基础知识(一)

    一、杂货

    1、逻辑运算符的区别与作用

    逻辑运算符

    作用

    &

    与作用,左右两边两个判断结果都为true就是true,否则是false

    |

    或左右,左右两边两个判断结果只要有一边为true,结果就是true,否则就是false

    ^

    异或,你为true我就是false

    &&

    左右两边,左边如果为false,右边不执行,直接返回结果false

    ||

    同理:左边如果为true,右边不执行直接返回true

    2、判断过程中:出现了问题,当前的问题就是我们在判断中内容输入的都是正确的,结果还是为false

             分析:因为我们原来使用==判断是判断的基本数据类型。如果换成引用数据类型了,我们在方法中引用的其实是对象的地址值。如果使用的是==判断对象的话,那么判断的就是对象的地址值。

             解决办法:在Java中 ,判断基本数据类型的值,使用的是==。但是判断对象的值使用的就是equals,将具体的值放入小括号中,通过hashCode生成进行判断。

    3、位移总结:

             左位移:会将正数移动成负数。一位数据二进制是从右往左位移,会触碰二进制的符号位。

        右位移:不会再符号位补数据,负数还是1,正数还是0。所以我们操作右位移的时候,数据正负不会变。

        无符号右位移:可以将负数移动成正数,但是正数不会移动成负数,因为右位移,补的是0,不会补1。

       4.基本数据类型

    ①、能否拼接?

                       不能做拼接,基本数据类型,进行拼接,就相当于是加法运算,将内容进行编号相加。

             ②、后期我们还会学习引用数据类型

                       1、如何区分引用数据类型和基本数据类型:基本数据类型,是定义类型的工作,没有对应的方法也没有对应的操作,只能定义类型和赋值存储类型。

                       2、当前基本数据类型格式是全小写命名,引用数据类型是首字母大写,其余小写命名格式。

             ③、运算过程中我们会设计到类型转换。

                       高类型转换成低类型:强制类型转换,如果不使用强制类型转换,Java默认是不让你转换的。

                       低类型转换成高类型:自动类型转换。Java默认就采取的是自动类型转换。

                       为什么字符类型在相加的时候,使用的是数字。因为字符默认大小没有int高,在加法操作的时候,默认就转换成了int类型。

             注意:如果是强制类型转换,就会损失精度,和你想要的数据,相差比较大。这也是为什么Java默认不使用强制类型转换的原因,因为损失精度,影响结果。

    5、字符类型

    数据类型

    字节数

    二进制位数

    byte

    1

    8

    short

    2

    16

    int

    4

    32

    long

    8

    64

    float

    4

    32

    double

    8

    64

    char

    2

    16

    boolean

    1

    1

    boolean类型的值只有true和false两种逻辑值,在编译后会使用1和0来表示,这两个数在内存中按位算,仅需1位(bit)即可存储,位是计算机最小的存储单位。

    6、简单运算:+ - *

             大家在操作的时候,需要注意一个小细节,容器不同的情况下,整数类型,会默认自动转换成int类型。

    7、如果当前的属性,没有赋值,请问是什么值?

                       String类型默认值是:null

                       Int类型默认值是:0

    二、Java关键字

    1、引用数据类型,String类:字符串类型,我们如果设置的是字符串,也就是带有双引号(所有的数据都要””)的内容,就需要用到容器:String

    2、  随机数对象:Random(使用时需要导包)

    3、当前Scanner输入对象,对输入的信息非常严格

    整数类型:只能输入整数,输入其他的数据就会报错。

    小数类型:可以输入整数,也可以输入小数。

    字符串类型:输入啥都可以拿到,可以输入数字,可以输入小数,也可以输入字母。

        4、创建出当前的对象,创建对象,我们需要提供一个关键字:new

    操作对象我们需要注意:对象类型首字母必须大写,格式问题。

                       格式:对象类型 容器名称 = new 对象类型();

    5、提示补全:CTRL+1(数字)

    6、封装四个关键字使用的范围

    位置

    private

    默认的

    protected

    public

    同一个类

    同一个包内的类

    不同包内的子类

    不同包并且不是子类

             注意:当前属性如果需要完全给别人使用,我们就需要设置公共的:public

             注意:当前属性如果只能自己完成,别人不能使用,我们就需要设置私有的:private

             注意:private 使用:方法:get方法与set方法,可以被别人使用。

    7、在子类对象中,通过关键字:extends,定义继承关系

    三、快捷键

        1、查看源码的方法:

             按着键盘中的:ctrl按键不动,点击对象的引用名称,也就是首字母大写的那个对象左键。进入后对象文件名为xxx.class就是源码。

    2、快速查询方法:ctrl + o

    3、删除整行:CTRL+D

    4、设置自动补全:WindowàPerferencesàJavaàEditoràContent Assist

    不要删除小点,直接添加:qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM

    5、快捷键生成:alt + shift + s(快速生成get,set方法,构造方法)

                       如果不会用快捷键:source中也可以找到,在左上角菜单中。

    快捷键生成有参与空参:alt + shift + s

    四、异常

    1、by zero(零不能做除数)

    2、索引角标越界异常(一般出现在数组中)

    3、空指针异常(一般非法使用NULL)

    五、方法和帮助工具类

    1、length:动态获取数组长度,长度从1开始计数。

    2、数组帮助工具类:Arrays,是在当前的util包中,只要看见了util包,我们就可以判断当前是一个工具类。

             例如:数组排序

        arrays.sort();

    六、算法

    1、冒泡排序算法

            //冒泡排序

    for(int i = 0; i < arr01.length; i++) {
    for(int j = 0; j < arr01.length - i - 1; j++) {
    if(arr01[j] > arr01[j + 1]) {
    temp = arr01[j];
    arr01[j] = arr01[j + 1];
    arr01[j + 1] = temp;
    }
    }
    2、选择排序算法

    //选择排序
    for(int i = 0; i < arr01.length; i++) {
    for(int j = i + 1; j < arr01.length; j++) {
    if(arr01[i] > arr01[j]) {
    temp = arr01[i];
    arr01[i] = arr01[j];
    arr01[j] = temp;
    }
    }
    }

           

    七、数组

    1、数组能否存储多种类型在数组中:数组在Java中是可以存储不同类型的数据的,但是得需要创建数组的时候,将创建的类型,变成对象类型。而当前对象的类型必须是:Object

    2、什么是Object:当前Object是Java中的所有对象的爹!不管是String还是后期的其他引用数据类型,都是通过它来创造的,所以当前要想在数组中存储不同类型的值,我们就需要使用Object

    3、具体使用

    1、  后期在面试中如果被问道了

    1、  数组是不允许存储不同类型的元素的,必须得严格按照创建数组中类型的具体定义来 添加内容。

    2、  如果当前真的需要存储不同类型的数据在数组中,我们其实可以通过Object定义存储。

    3、  说白了,在Java中,部分的解释不是绝对的。通过数组我们得到了启发,可以通过万能对象的创建进行存储。

    5、数组创建后不能修改长度,也就意味着创建后不能增加新的容器长度,也不能删除容器长度。

             数组创建后,不能增加也不能删除。

    6、如果需要去重,我们需要创建新的数组进行存储。

    八、面向对象

          1、面向对象最基本的操作:

    1、  如何创建对象:通过class对象,创建类名

    2、如何设置属性以及属性的作用:属性是对象内的参数,我们可以动态设置参数变量。

    3、如何设置对象中的方法:对象中的方法,就是给别人调用使用的。方法有返回值和方法没有返回值的区别。通过关键字,void和其他的返回类型定义。

    4、方法中小括号的作用:小括号的作用就是参数的传递,我们方法中小括号内的参数一般命名为:形参。形参中,可以定义多个参数,参数与参数间使用逗号相隔。

          2、封装其实就是对对象进行封装工作

                       1、封装属性:对属性的访问权限进行了封装,私有的只能自己用,公共的谁都可以用。

                       2、封装方法:普通方法也可以使用关键字进行封装,效果一样,私有的方法别人不能用。

                       3、对私有的属性,可以封装一套获取方法和设置方法,分别是set和get

                                Set别人设置我当前的私有属性的数据。

                                Get别人获取使用我当前的私有属性的数据。

                       4、对创建对象的时候进行封装:构造方法

                                创建对象的过程中,我需要创建出来的对象是空对象,那么就用空参构造方法。

                                创建对象的过程中,我需要创建出来的对象是带有数据的对象,不是一个空对象,那么我们就使用有参构造方法来创建。

                                如果对象中不写构造方法,默认就有空参,如果写了那么就使用写了的,如果只写有参不写空参,那么就无法使用空参创建对象。默认的空参在你写了有参的时候就会消失,需要手动在再写空参才能正常使用。

                       5、构造方法和普通方法一样,可以方法名相同,但是参数数据类型与数量不能相同,必须在同一个对象中,我们称之为是方法的重载。

                                重载:方法名必须相同,参数类型不同。

                                重载:可以修改方法的访问修饰符,可以修改返回类型,无返回还是有返回。

          3、输出对象名称显示地址

             1、当前我们输出对象的名称,显示的是地址值,出现的原因在于当前我们打印出了对象的HashCode值

             2、解决办法如何完成:我们需要在对应的对象内,设置输出格式才能解决,需要通过方法:toString完成(进入Student对象中,设置toString方法)

    2、  toString方法,我们依然可以通过快捷键生成:alt + shift + s

    3、继承

    1、重写

    1、方法的重写,就是对父类的方法进行升级,如果子类和父类都有相同方法的时候,默认就会调用子类的重写方法。

             重写方法,为什么上面要有一个:@Override:其实是注解,帮助我们检测当前的方法,是否是重写方法,如果不是,那么就报错。

    Override注解的功能:说白了,就是帮助我们检查方法是否是重写方法,如果不是就报错,其实我们也可以删除当前的注解,删除后就没有检查功能了。

    方法的重写,需要注意事项:

                       1、方法名必须相同。

                       2、必须是继承或者实现关系。

                       3、重写方法传递的形参必须与父类的方法保持一致,不能设置其他形参。

                      

                       4、重写的方法,访问权限封装关键字:子类的访问权限可以修改,但是权限的大小一定要比父类大。不能比父类小。

                       父类是:受保护的,子类可以使用:受保护的和公共的。不能使用默认的,和私有的。

                       5、父类和子类重写方法的返回值,要保持一致。

             2、继承:在Java中是单继承。可以多重继承,父类可以有多个儿子,但是儿子只能有1个爹。

    2、面向对象:继承,使用构造方法

             1、有一种情况:父类抽取共性,子类还有自己的特性,我们可以在创建子类的时候,将数据设置到父类中

                       方法一:使用this关键字,调用父类的方法进行设置。

                       方法二:使用super关键字,调用父类的构造方法存储。

    1、  super关键字

    1、  在构造方法中,引用super就是去到父类的对应构造方法中。

    2、  在普通方法中,引用super,那么就是父类对象的引用。

    3、  区分:看super调用的时候是否带有小括号。

    Super带有小括号:引用构造方法。

    Super不带小括号:父类对象的引用。

             3、父类对象如何没有继承,那么能否使用super,是可以使用super关键字的。

             4、父类如果没有继承,super引用引用到哪去了呢?

                       父类如果没有继承,默认都是指向的Object对象

            

    3、final关键字的使用

             1、final关键字:最终的,不可更改的。

             2、具体使用:(面试原题)

                       1、final可以修饰对象:但是修饰后,当前的对象是不能够被继承的。

                       2、final可以修饰属性:但是修饰后,属性就会变成常量,不能够修改。

                       3、final可以修饰方法,但是修饰后,方法不能够被重写。

             3、final的作用是什么

                       1、每个用户都会存在一个用户id,这个属性后期任何人都不能修改,所以用户的属性我们后期要设置final变成常量。

                       2、方法呢:有些重要的方法,比如支付方法和退款方法,我们是不允许随便修改的,所以我们当前支付的方法,是不允许重写的。只要和钱打交道的方法,我们都需要严谨对待。

                       3、对象,有些对象是不允许被继承的,如果一旦继承了,那么当前对象里面的方法以及操作,我不需要任何的判断和权限,就能够直接使用了。如果是特殊对象,和高加密对象等等,我们是不允许他被继承的。

             4、后期大家遇见面试题问final,和笔试题问答题final。我们就需要如下回答

                       1、属性使用final:变常量,让用户权限等数据,变成不可修改的数据。

                       2、方法使用final:敏感操作的方法,一般情况下是不予许被重写的,那么我们就需要在方法上使用final。

                       3、对象使用final:项目的核心对象,敏感对象,一般情况下都是不需要继承的,一旦继承,里面的所有非私有的方法和属性都能够直接被调用,。非常不安全。我们需要将对象设置为final修饰的,这样对象就不能直接被继承了。

    4、static关键字的使用

             1、static是什么:static是静态的意思,它的主要作用就是让程序的生命周期拉长,让属性可以不通过new关键字创建就能直接使用。让方法能够不通过关键字就可以直接调用。

             2、static修饰的属性和方法,我们可以不通过new对象,通过对应的类名直接调用

                       测试类:

             3、原理:当前对象如果设置了static修饰的关键字,那么对象在new之前,静态的属性和方法,其实就已经加载到了内存中,加载是通过.class文件生成的时候就加载进入了。

             4、static修饰的优点:访问的权限比较大,可以不通过new关键字创建对象就能直接使用了。而且数据,访问的权限是全局的。

                       多个方法之间可以共享数据,但是不能再多个程序中共享。

                       成员变量,如果使用static,那么多个方法之间,拿到的数据就是共享的。

                       方法也是同理。

             方便对象的使用,快捷。减少new的使用。

             5、static修饰的缺点:

                       1、共享的数据,有一个方法进行修改了,其他的方法拿到的数据都是修改后的。

                       2、共享的数据,声明周期又长。也就意味着内存回收周期就长,长期使用比较占用内存。

             6、静态代码块使用:我们对象在创建前就会直接调用

             7、查看谁先调用

             8、静态代码块不管是在上面还是下面,都会先构造方法执行,原因就是静态.class文件的时候就已经在了,准备执行了。而构造方法是new关键字运行的时候才会调用。

             9、在当前的程序工作空间中,bin文件夹里面都是class文件,但是需要注意,程序中的代码,一旦出现错误,class文件就会自动删除。没有错误的情况下后,文件又会自动生成。

  • 相关阅读:
    发布 Rafy .NET Standard 版本 Nuget 包
    使用 MarkDown & DocFX 升级 Rafy 帮助文档
    apache2服务器支持cgi功能
    百兆网口与千兆网口速率协商不成功
    ubuntu etho0 up cron
    linux 后台进程
    MySQL的事务性
    linux下visual studio code配置c++调试环境实例
    linux下visual studio code中gdb调试文件launch.json解析
    Zookeeper安装后,编译C client时报错"syntax error near unexpected token `1.10.2"
  • 原文地址:https://www.cnblogs.com/qjc-hll-520/p/11918112.html
Copyright © 2011-2022 走看看