笔者csdn博客同文地址:https://blog.csdn.net/weixin_45791445/article/details/106597515

我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。

个人博客:https://blog.csdn.net/weixin_45791445

小白最近快考试了,复习的顺便总结一下一些小白认为容易忘记的知识点,希望能帮助到大家。

小白的总结系列二,三已上线Java中容易遗漏的常用的知识点( 二 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
Java中容易遗漏的常用的知识点( 三 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
  1. Java代码运行机制

     1. 编写源代码
    得到的是以“.java”为扩展名的源文件,源文件名应与该文件中被修饰为public的类名相同。
    2. 编译(使用cmd命令编译时使用的命令是javac 文件名.java。使用的javac编辑器)
    编译后的文件叫做类文件。得到的是以“.class”为扩展名的字节码文件。
    这里出现的错误叫编译时错误。 然后使用java命令运行,命令格式为:java 项目名(注意这里没有后缀))
    3.类装载ClassLoader
    4.字节码(byte-code)校验
    5. 解释
    6. 运行
    这里出现的错误叫运行时错误。
  2. 在一个简单的Java程序中有一个获以上的类组合而成。其次在一个可以独立运行的Java程序中有且只有一个main()方法,它是程序运行的开端。程序的主体被包含在类中,这个起始的地方被称为main方法。main方法之前必须加上public,static,void。static表示

  3. switch中的控制表达式必须为char,int,short或byte类型的。case后面的常量表达式必须和控制表达式的类型相同。(书上)

书上这一节后面的习题中有个选项说支持long类型是错误的。

switch表达式后面的数据类型只能是byte,short,char,int四种整形类型,枚举类型和java.lang.String类型(从java 7才允许),不能是boolean类型。至于四种基本类型的包装类是由于有自动拆箱的操作所以支持(实际)

  1. instanceof是对象运算符,用来判定一个对象是否属于莫个指定的类(或其子类)的实例。

  2. 逻辑运算符分为标准逻辑运算符(!& ^ |)和条件逻辑运算符(&& ||)

  3. byte:1字节,short:2字节,int:4字节,long:8字节,float:4字节,double:8字节,char:2字节,boolean:书上此处为空。

switch的格式



do-while的格式(最后要加一个";")





foreach

  1. 运算符优先级

  2. 在判断语句中的i++和--j是一个完整的独立语句,先进行自加或者自减后再进行比对。

    (下面是debug测试)



  3. outer标签

outer标签是什么,上面的文章讲的很详细。

小白在这里补充一下break outer;和continue outer;的区别

break outer;是直接完全的跳出到outer标签标记的循环外面。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200608102636433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc5MTQ0NQ==,size_16,color_FFFFFF,t_70#pic_center =500x500)

continue outer;的作用并非完全跳出外层循环,而是跳出outer标签标记循环的本次循环,直接进行此循环的下一次循环;

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200608102735262.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTc5MTQ0NQ==,size_16,color_FFFFFF,t_70#pic_center =500x500)

12. 构造方法

  1. 类是对象模板,只有实例化之后才可以使用。new运算符用于创建一个类的实例并返回对象的引用。

    默认构造方法对成员变量的初始化原则如下:

    对于整型成员变量,默认初值是0;对与浮点型,默认初值是0.0;对于boolean类型,默认初值是false;对于引用型,默认值是null。

  2. this关键字

    this可以出现在类的构造方法和非static修饰的成员方法(即实例方法)中,this代表实例对象自身,可以通过this来访问实例对象的成员变量或调用成员方法。

    类方法中不可以使用this

    由于类方法可以通过类名字直接调用,这时可能还没有任何对象产生,因此指代对象实例本身的this关键字不可以出现在类方法中。

  3. 	1)public访问权限最具有开放性,可以用来修饰类、类与接口的成员(包括成员变量、成员方法)
    。由public类修饰的类或类成员可被任何类访问。
    2)protected可以用来修饰类的成员变量或方法。具有protected访问特性的类成员可以被本类、
    本包中的其他类访问,也可以被其他包中的子类继承,它的可访问性低于public,高于默认。
    3)如果在定义类、接口、成员变量、成员方法时没有指定访问权限控制符,他们的权限就为默认权
    限。具有默认权限的类、接口、成员变量、成员方法,只能被本类和同一个包中的其他类、接口及成员方
    法引用,因此默认权限也被称为包权限。
    4)私有访问控制符private用来声明类的私有成员,它提供了最高的保护级别。用private修饰的
    成员变量或方法只能被该类自身所访问和修改,而不能被任何其他类(包括该类的子类)来获取和引用。

Java文件名应与修饰为public的类名相同。且Java文件中只能有一个public修饰的类



特殊情况:

只有被修饰为public访问权限的成员变量和方法才可以被不同包的其他类使用,修饰为protected的成员变量和方法可以被不同包的子类继承,访问。不同包的其他类禁止访问修饰为private和默认权限的成员变量和方法。

  1. super关键字

    子类在继承父类时,可能会出现变量隐藏、方法覆盖(overriding)等现象。变量隐藏指子类的成员变量与父类成员同名,此时,父类的成员变量被隐藏。方法覆盖指子类的方法与父类的方法名相同,方法的返回值类型、入口参数的数目、类型、顺序均相同,只是方法实现的功能不同,此时父类的方法被覆盖。如果子类需要调用或访问父类被隐藏的变量或被覆盖的方法,可以使用super关键字实现。

    当用子类的构造方法创建一个子类对象时,子类的构造方法总会显式或隐式地先调用父类的某个构造方法。如果子类的构造方法没有明显地指明调用父类的哪个构造方法,Java会默认调用父类的无参构造方法;子类也可以通过super关键字显式调用父类指定的构造方法,具体调用哪个构造方法需要根据super()的参数类型决定。

  2. Java中的子类对象可以向上转换为父类对象(也称上转型对象),允许将子类的实例赋值给父类的引用,也允许一个父类的引用指向子类对象。

    但是反过来,一个父类对象的类型未必可以向下转换成子类对象,因为子类具有的信息,父类未必包含,这种转换是不安全的。只有当父类引用实际上指向一个子类对象时,才可以进行这种转换。

  3. 实例变量依附于对象,在使用new关键字创建对象时,Java运行系统为每个对象分配一个内存空间,不同的实例变量占用不同的内存区域。类变量依附于类(而非对象),对于类变量来说,Java运行系统为类的类变量分配公共的存储空间,该类的每个实例对象共享同一类变量的存储空间。因此,每个对象对类变量的修改都会影响其他实例对象。

    (1)类变量可以通过类名直接访问,而不需要创建对象。

    (2)任何一个对象对类变量的修改,都是在同一内存单元上完成的。因此,每个对象对类变量的修改都会影响其他实例对象。

    声明为static的方法称为类方法(或称静态方法),与此相对,没有static修饰的成员方法则为实例方法。类方法的本质是该方法属于整个类,而不是属于某个实例,可以不创建实例,直接通过类名调用。 类方法的使用具有以下特点:

    (1)类方法可以通过类直接调用,而不需要创建实例对象。例如:Java Application的入口main()方法就被声明为static类方法,可以不需要创建任何实例对象对调用。

    (2)类方法属于整个类,被调用时可能还没有创建任何对象实例,因此类方法内只可以访问类变量,而不能直接访问实例变量和实例方法。

    (3)类方法中不能使用this关键字,因为静态方法不属于任何一个实例。

  4. 抽象类和抽象方法(为什么会有抽象类?

    语法:

    abstract class <类名> [extends<父类>][implements<接口名>]{ <类主体> }

如果一个类A需要继承抽象类,则该类必须实现抽象类中定义的所有抽象方法。否则,该类也必须修饰为抽象类。也就是说,抽象类的子类如果仅实现父类的部分抽象方法,子类也必须声明为抽象类。

为什么会有抽象类和抽象方法?

有时候,我们没有足够的信息去描述一个具体的对象,这样就不能用正常的类来描述它,那么这时候就需要抽象类了。抽象方法没有方法体,为什么呢?小白的理解是我们只知道这个对象有这样的一种方法(或者理解为" 行为 "),但不知到它的这种方法能够干什么,就没有写具体的方法主体。因此,抽象类不能实例化(创建的人都不知道它具体是什么,怎么实例成一个具体的对象)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607181353317.png#pic_center =240x240)

  1. 接口

    接口(interface)是Java所提供的另一种重要结构。接口是一种特殊的类,但接口与类存在着本质的区别。类有成员变量和成员方法,而接口却只有常量和抽象方法,也就是说接口的成员变量必须初始化,同时接口中的所有方法必须声明为abstract方法

语法:

[接口修饰符] interface〈接口名〉[extends〈父类接口列表〉] { 接口体 }

用implements子句表示类实现某个接口。一个类可以同时实现多个接口,接口之间用逗号“,”分隔。 在类体中可以使用接口中定义的常量,由于接口中的方法为抽象方法,所以必须在类体中加入要实现接口方法的代码,如果一个接口是从别的一个或多个父接口中继承而来,则在类体中必须加入实现该接口及其父接口中所有方法的代码。 在实现一个接口时,类中对方法的定义要和接口中的相应方法的定义相匹配,其方法名、方法的返回值类型、方法的访问权限和参数的数目与类型信息要一致

接口继承中出现的方法重名和常量重名

(1)方法重名 如两个方法完全一样,只保留一个。 如果两个方法有不同的参数(类型或个数),那么子接口中包括两个方法,方法被重载。 若两个方法仅在返回值上不同,出现错误。

(2)常量重名 两个重名常量全部保留,并使用原来的接口名作为前缀。

  1. 内部类:

    Java支持在一个类中声明另一个类,这样的类称为内部类(InnerClass),而包含内部类的类称为内部类的外部类(OuterClass)。内部类一般用来实现一些没有通用意义的功能逻辑。

eaducoder里面老用。小白表示心累ಥ_ಥಥ_ಥ。

一个类把内部类看成是自己的成员,外部类的成员变量在内部类中仍然有效,内部类可以直接使用外部类中的成员变量和方法,即使他们是private的,这也是内部类的一个好处。

  1. 匿名类(小白表示从未用过,但写一下吧。万一考呢。)

    使用类创建对象时,Java允许把类体与对象的创建组合在一起。也就是说,类创建对象时,除了构造方法还有类体,此类体被称为匿名类。

    实战:
一个匿名类:
Student3 liu = new Student3() {
void speak() {
System.out.println("这是匿名类中的方法");
}
};// 匿名类体结束

重点来了

  1. 泛型

    泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

1)泛型类声明:

创建一个简单的泛型是非常容易的。首先,在一对尖括号(< >)中声明类型变量,以逗号间隔变量名列表。在类的实例变量和方法中,可以在任何类型的地方使用那些类型变量。

格式:

class 泛型类名<泛型列表>{
类体

泛型类声明时并不指明泛型列表是什么类型的数据,可以是任何对象或接口,但不能是基本类型数据。泛型列表处的泛型可以作为类的成员变量的类型、方法的类型以及局部变量的类型。

2)使用泛型类声明对象:

使用泛型类声明对象时,必须指定类中使用泛型的具体具体类名,如: Chorus<Student,Button> model model = new Chorus<Student,Button>();

3)泛型接口:

格式:

Interface 泛型接口名<泛型列表>{
接口体

小白没想到书上对于泛型讲的这么多。(唉,不禁为我的菜鸡感觉亿点悲伤。)



小白实战中常用的是:

在创建arraylist或者list集合时加泛型

ArrayList<String> listTest = new ArrayList<String>();

这样限定了创建集合的类型。对于此小白的理解时泛型是在创建list或者arrayList集合时指定集合中的元素是同一种类型。例如你在创建时指定了创建的list集合中只能有String类型的变量,那么你向其中添加数据时,如果不是String类型的数据,程序在编译时就会报错。如果不是用泛型这种错误只有在程序运行时才会报错。而且,泛型让我们在get获得集合中的数据时,无需因为类型不同需要强转而烦恼。





当你向加了泛型的语句中加入不同数据类型的数据时是会报错的。但如果不加,这种错误就只能在程序运行是才报错。

这次先写到这里小白明天接着写。

Java中容易遗漏的常用的知识点( 二 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)
Java中容易遗漏的常用的知识点( 三 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607181353317.png#pic_center =240x240)

小白的总结系列二已上线Java中容易遗漏的常用的知识点( 二 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)



兄弟们,小白编写不易。希望各位兄弟们,点赞评论收藏加关注。小白在此谢谢各位老爷们,也祝福和我一样面临考试的兄弟们高分通过。



对于白嫖的兄弟们,

最新文章

  1. STM32之通用定时器
  2. package.json for npm中依赖外部组件时常用的版本符号含义
  3. MySQL Python教程(4)
  4. code vs1262 不要把球传我(组合数学) 2012年CCC加拿大高中生信息学奥赛
  5. postgres create table default now
  6. Java8新特性
  7. nodejs 按行读取 readline
  8. java中加载xml文件方法
  9. 合理使用Memcached进行缓存部署
  10. java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode(尼玛,蛋疼的错误)
  11. 使用vscode对c进行调试
  12. 使用点击二分图计算query-document的相关性
  13. RTSP协议分析
  14. CAN总线、自然与人
  15. Delphi 10.3版本获取windows系统版本和CPU信息
  16. JDK 1.8 新特性
  17. [蓝桥杯]ALGO-79.算法训练_删除数组零元素
  18. 在 Vue 项目中引入 tinymce 富文本编辑器
  19. asp.net web 服务器端全局定时执行任务
  20. Android设置日期DatePickerDialog

热门文章

  1. Git基本操作命令合集
  2. 201771010128王玉兰《面向对象与程序设计(java)第十五周学习总结》
  3. CF861D
  4. 模板:JSP公共内容
  5. SQL——TOP、IN、BETWEEN AND、IS NULL和IS NOT NULL
  6. 【NLP】常用优化方法
  7. linux连个文件都删除不了,什么鬼!
  8. Python学习之路【第一篇】:Python简介与入门
  9. ES6-Promise承诺
  10. javascript -字符串常用方法