笔者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中容易遗漏的常用的知识点( 二 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)



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



对于白嫖的兄弟们,

Java中容易遗漏的小知识点( 一 )(为了和小白一样马上要考试的兄弟准备的,希望小白和大家高过不挂)的更多相关文章

  1. Java学习过程中的总结的小知识点(长期更新)

    Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...

  2. 【Java基础】Java中你必须知道的知识点

    目录 Java中面向对象的基础知识 1. 什么是面向对象  2. 三大基本特征和五项基本原则 3. Java的平台无关性 4. 值传递和引用传递 5. 方法重载和重写 6. 基本数据类型 7. 包装类 ...

  3. 在JAVA中记录日志的十个小建议

    JAVA日志管理既是一门科学,又是一门艺术.科学的部分是指了解写日志的工具以及其API,而选择日志的格式,消息的格式,日志记录的内容,哪种消息对应于哪一种日志级别,则完全是基于经验.从过去的实践证明, ...

  4. eclipse下java中凝视字体太小和xml中中文字体太小问题解决方法

    我们在win7下进行android应用开发.须要搭建对应的开发环境.如今普遍基本上都是eclipse+adt+sdk,在本人搭建完环境后,发现eclipse下.java中的凝视和xml中的中文字体变得 ...

  5. Java中main()的args的知识点浅谈

    我们先来了解下Java中main()方法的默认定义格式: public static void main(String[] args){ }1.main方法是程序执行的入口,除了args这个形参变量可 ...

  6. java中string内存的相关知识点

    (一):区别java内存中堆和栈: 1.栈:数据可以共享,存放基本数据类型和对象的引用,其中对象存放在堆中,对象的引用存放在栈中: 当在一段代码块定义一个变量时,就在栈中 为这个变量分配内存空间,当该 ...

  7. JAVA中一些需要记录的知识点(进阶部分)···持续更新

    1.JAVA中的相对路径 file = new file("")与file = new file("./")方式相同,该路径为整个project的根目录(实际上 ...

  8. java中MD5加密的小使用

    最近项目中需要用到md5加密,就自己在网上看了看. package com.wxgs.ch01; import java.security.MessageDigest; import java.sec ...

  9. java 中一些需要注意的知识点

    java数组的length属性是容量,而不是数组真实元素的个数: 多线程中的interrupt()方法并不会终止处于"运行状态"的线程,它只是将线程的中断标记设为true. juc ...

随机推荐

  1. Understanding REST and RESTful APIs

    Understanding REST and RESTful APIs If you've spent any amount of time with modern web development, ...

  2. Node.js躬行记(1)——Buffer、流和EventEmitter

    一.Buffer Buffer是一种Node的内置类型,不需要通过require()函数额外引入.它能读取和写入二进制数据,常用于解析网络数据流.文件等. 1)创建 通过new关键字初始化Buffer ...

  3. 微服务项目的docker自动化部署流程

    目录 微服务的Docker自动化部署 制作JDK1.8的Docker镜像 Docker常用命令介绍 制作image的一般流程 将本地的image上传至私人仓库 使用Maven插件实现自动化docker ...

  4. eatwhatApp开发实战(十四)

    之前我们就输入框EditText做了优化,而这次,我们为app添加拨打电话的功能. 首先是布局,将activity_shop_info.xml中对应的电话那一栏进行重新设计: <Relative ...

  5. Rocket - debug - DebugTransport

    https://mp.weixin.qq.com/s/EcsuTjb4hFF9Ncig9Gfhew 简单介绍DebugTransport的实现. 1. JtagDTMConfig 1) JtagDTM ...

  6. Rocket - diplomacy - 模块结构信息

    https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg   讨论模块结构信息的来源及使用方式.     ​​   1. diplomacy   diplom ...

  7. JSON.parse() 的实现

    目录 1. JSON.parse() 2. 前置知识 2.1 JSON格式中的数据类型 2.2 转义字符的处理 2.2 判断对象是否相等 2.3 寻找匹配的字符串 2.4 基础的递归思想 3. 实现流 ...

  8. Java实现 LeetCode 310 最小高度树

    310. 最小高度树 对于一个具有树特征的无向图,我们可选择任何一个节点作为根.图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树.给出这样的一个图,写出一个函数找到所有的最小高度树 ...

  9. Java实现 谁不爱打牌

    谁不爱打牌 [问题描述] BobLee最近在复习考研,但是他也喜欢打牌(有谁不爱玩牌呢?).但是作为一名ACMER,斗地主显然满足不了他的兴趣, 于是他和YYD一起YY出来了一个游戏规则,规则如下. ...

  10. Java实现 LeetCode 50 Pow(x,n)

    50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, ...