【廖雪峰Java入门】学习汇总

  • 一、快速入门
    • 1. 基本概念
    • 2. 语言基础
    • 3. 流程控制
    • 4. 数组操作
  • 二、面向对象编程
    • 1. 面向对象基础
    • 2. Java核心类
  • 三、The End

网址:Java教程-廖雪峰的官方网站


一、快速入门


1. 基本概念

1)Java技术体系至少包括四个部分:

  • 1.Java程序设计语言
  • 2.各种平台上的Java虚拟机(JVM)
  • 3.Java API类库
  • 4.一系列辅助工具,如javac

其中,1+2+3+4=JDK;2+3=JRE(Java运行时环境)

JDK>JRE>JVM

2)两个版本JDK
Oracle JDK vs Open JDK

3)Java技术体系所划分的三大平台
JavaSE vs JavaEE(里面的框架,该学的) vs JavaME

4)语言 和 实际应用的鸿沟:框架


2. 语言基础

1)Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组

public class Hello {public static void main(String[] args) { // 方法名是main// 方法代码...} // 方法定义结束
}

2)在定义变量的时候,不写初始值,就相当于给它指定了默认值。默认值总是0

3)变量不但可以重新赋值,还可以赋值给其他变量

4)基本数据类型
整数类型:byte,short,int,long
浮点数类型:float,double
字符类型:char
布尔类型:boolean

5)计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000-11111111,换算成十进制是0-255,换算成十六进制是00-ff。

6)不同的数据类型占用的字节数不一样。Java基本数据类型占用的字节数
byte恰好就是一个字节,而long和double需要8个字节

7)整型
对于整型类型,Java只定义了带符号的整型,因此,最高位的bit表示符号位(0表示正数,1表示负数)。各种整型能表示的最大范围如下:

  • byte:-128 ~ 127
  • short: -32768 ~ 32767
  • int: -2147483648 ~ 2147483647
  • long: -9223372036854775808 ~ 9223372036854775807

8)long型的结尾需要加L
对于float类型,需要加上f后缀
float类型可最大表示3.4x10 ^38,而double类型可最大表示1.79x10 ^308

9)Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符

10)定义变量的时候,如果加上final修饰符,这个变量就变成了常量

11)对byte和short类型进行移位时,会首先转换为int再进行位移。
仔细观察可发现,左移实际上就是不断地×2,右移实际上就是不断地÷2

12)运算优先级

13)类型自动提升与强制转型

  • 在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short和int计算,结果总是int,原因是short首先自动被转型为int。

14)关于浮点数

  • 在计算机中,浮点数虽然表示的范围大,但是,浮点数有个非常重要的特点,就是浮点数常常无法精确表示。
  • 比较两个浮点数是否相等,通常是比较他们的绝对值之差是否小于一个特定的值

15)布尔运算

  • 短路运算,注意
  • 三元运算符,注意:b ? x:y ,其中x和y必须同类型

16)字符和字符串

  • 字符串连接
    可以使用 + 连接任意字符串和其他数据类型
    连接字符串和其他数据类型,会将其他数据类型先转化为字符串,再连接
  • 多行字符串
    从Java13开始,字符串可以用 “”"…"""表示多行字符串
  • 不可变性,注意
  • 注意要区分空置null和空字符串 “” ,空字符串是一个有效的字符串对象,他不等于null

17)数组类型

  • 数组所有元素的初始化为默认值,整型都是0,浮点数是0.0,布尔型是false
  • 数组一旦创建后,大小不可改变
  • 可以用 .length 获取数组大小
  • 数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型

3. 流程控制

1)输入和输出

  • 输出
    print ——不换行输出
    println ——换行输出
    printf ——格式化输出
  • 占位符
    %d %x:十六进制整数 %f %e:科学计数法表示的浮点数 %s:格式化字符串
  • Java提供Scanner对象来方便输入,读取对应的类型可以使用:scanner.nextline() / nextInt() / nextDouble() /…

2)判断引用类型相等

  • 判断引用类型的变量是否相等,== 表示 是否指向同一个对象,不是表示内容是否相等
  • 要判断引用类型的变量内容是否相等,必须使用 equals() 方法
  • 注意要避免 NullPointerException 报错

3)switch 多重选择

  • 使用switch,要注意有没有写 break 语句 和 default 语句
  • 从Java12开始,switch加入 -> 新语法,使用新语法,不但不需要break,还可以直接返回值
  • yield
    如果需要复杂的语句,我们可以写很多语句,放到 {…} 里,然后yield返回一个值作为switch语句的返回值
  • switch 的计算结果必须是 整数、字符串或枚举类型

4. 数组操作

1)使用 Arrays.toString() 函数可以快速获取一维数组内容

2)排序

  • 调用Java标准库里的 Arrays.sort() 函数,可以对数组排序
  • 对于非引用型数组,实际上修改了数组的本身
  • 对于引用指向型数组,只是元素的指向变化了

3)使用 Arrays.deepToString() 函数可以获取二维数组内容

4)命令行参数

  • 命令行参数类型是String[] 数组
  • 命令行参数有JVM接收用户输入并传给main方法


二、面向对象编程


1. 面向对象基础

1)参数绑定

  • 基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响
  • 引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方

2)构造方法

  • 可以定义多个构造方法,new 来调用,通过参数数量、位置、类型来区分
  • 一个构造方法可以调用其他构造方法,这样做的目的是便于代码的复用。调用其他的构造方法的语法是 this(…)

3)方法重载

  • 方法重载是指多个方法的方法名相同,但各自的参数不同
  • 重载方法应该完成类似的功能
  • 重载方法返回值类型应该相同

4)继承

  • 被继承的:超类、父类、基类;继承得到的:子类、拓展类
  • Java只允许一个class继承自一个类。所以一个类有且仅有一个父类
  • 子类无法访问父类的 private 字段或 private 方法
  • private
    为了让子类可以访问父类的字段,我们需要把 private 改成 protected。用 protected 修饰的字段可以被子类访问
  • super()
    在Java中,任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会自动加一句 super();
    如果父类没有默认的构造方法,子类就必须显示调用 super() 并给出参数以便让编译器定位到父类的一个合适的构造方法
    子类不会继承任何父类的构造方法
  • 向上转型 / 向下转型
    向下转型很可能会失败。失败会报错:ClassCastException
    可以使用 instanceof 函数,来检查实例是不是某类
  • 可以安全的向上转型为更抽象的类型;可以强制向下转型,最好借助 instanceof 判断

5)多态

  • 方法名相同,方法参数相同,但方法返回值不同,也是不同的方法
  • 加上 @Override 可以让编辑器帮助检查是否进行了正确的覆写。希望进行覆写,但不小心写错了方法签名,编译器会报错
  • Java的实例方法调用是基于运行时的”实际类型“的动态调用,而非变量的声明类型
  • 在子类的腹泻方法中,如果要调用父类的被覆写的方法,可以用 super 来调用
  • final 修饰符作用:
    修饰的方法可以阻止被覆写
    修饰的class可以阻止被继承
    修饰的field 必须在创建对象时初始化,随后不可修改

6)抽象类

  • 通过 abstract 定义的方法是抽象方法,它只有定义,没有实现。抽象方法定义了子类必须实现的接口规范
  • 定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法
  • 如果不是先抽象方法,则该子类仍是一个抽象类

7)接口

  • 如果一个抽象类没有字段,所有方法全部都是抽象方法,就可以把该抽象类改为接口 : interface 。所谓interface,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有
  • 当一个具体的class去实现一个 interface 时,需要使用 implements 关键词
  • 一个类可以实现多个 interface
  • 一个 interface可以继承自另一个 interface 。使用extends
  • default 方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的时default 方法,那么子类就不必全部修改,只需要在需要覆写的地方去覆写新增方法

8)静态字段和静态方法

  • 最好用类名访问静态字段。可以把静态字段理解为描述 class 本身的字段,非实例字段
  • 调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类名就可以调用
  • 静态方法属于 class 而不属于实例,因此,静态方法内部,无法访问 this 变量,也无法访问实例字段,它只能访问静态字段
  • 接口的静态字段
    interface也可以有静态字段,且静态字段必须为final类型

9)包

  • 在定义class的时候,我们需要在第一行声明这一个class属于哪个包
  • 包作用域
    位于同一个包的类,可以访问包作用域的字段和方法。不用 public protected private 修饰的字段和方法就是包作用域
  • import
    如果有两个class名称相同,例如,mr.jun.Arrays 和 java.util.Arrays,那么只能import其中一个,另一个必须写完整类名
  • JDK的核心类使用java.lang包,编译器会自动导入

10)一个.java文件只能包含一个public类,但可以包含多个非public类


2. Java核心类

详见 教程网站内容。



三、The End

有了一些语法基础,开始看 Java 四大名著了

【廖雪峰Java入门】学习汇总相关推荐

  1. java廖雪峰_廖雪峰Java教程学习笔记(一)——Java程序基础

    (一)Java程序基本结构 Java是面向对象的语言,一个程序的基本单位就是class.在class内部,可定义若干方法. 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写 ...

  2. 如何找到python廖雪峰基础_为什么看不懂廖雪峰的Python学习教程?

    先不要怀疑自己的智商,也许是你完全没有编程基础,这个时候,可以选个视频课程看看,B站还有各路公开课上有很多,自己找找. 或者觉得这样有点麻烦,那就花点钱,买个基础入门课程学学,试试下面的链接. 我觉得 ...

  3. Java入门学习注意事项有哪些?

    想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...

  4. Java入门学习笔记[狂神说Java]

    写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...

  5. java入门学习_Java入门学习进阶知识点

    Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...

  6. Java基础学习汇总

    Java基础学习汇总 java语言基础 java函数和数组 java面向对象 java异常 整理用,早就停更... 写作不易,如果您觉得写的不错,欢迎给博主点赞.收藏.评论.收藏来一波~让博主更有动力 ...

  7. 廖雪峰Java高级架构师第一期

    廖雪峰Java高级架构师第一期

  8. 考研二战失败 我的从零开始Java入门学习(十)

    文章目录 一.集合 1.Collection集合类 1.1 Collection集合类方法 1.2 Collection的子类 2.Map集合类 2.1 Map集合类方法 2.2 Map类的子类 3. ...

  9. 廖雪峰Java自学笔记------Java简洁

    廖雪峰Java自学笔记------Java简洁 这是专门针对小白的零基础Java教程. 为什么要学Java? 因为Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师,选择Ja ...

最新文章

  1. 认识Backbone (五)
  2. 意大利万岁??摘自网络
  3. 【收藏】SAP记账码
  4. 串行通信的波特率高速和低速区别
  5. 在 Linux 下使用 RAID(二):使用 mdadm 工具创建软件 RAID 0 (条带化)
  6. 使用 Advanced Installer 打包 一键安装Web应用程序
  7. Flex Module优化
  8. 阿里,百度,腾讯等一线互联网公司中,Java开发的招聘标准
  9. swift -- 字典
  10. GoLand添加一个已有项目的相关配置
  11. atitit.闭包的概念与理解attilax总结v2 qb18.doc
  12. 5输入的多数表决器(结构化建模)
  13. PHP环境精简,EasyPHP 17下载 EasyPHP Devserver 17.0 lite php开发环境 官方精简版 仅WindowsXP/Win8 下载-脚本之家...
  14. Python学习笔记—— 面向对象2. 私有属性和私有方法
  15. 蝶式套利(butterfly spread)
  16. OEM、ODM、OBM分别是什么?
  17. LXDE vs XFCE:哪个是更好的轻量级桌面环境?
  18. Spring 中 MongDB Conver转换器的使用
  19. python-爬取中国评书网音频
  20. 移动app隐私政策规范条款参考模板示例

热门文章

  1. 清除C盘系统垃圾和缓存的批处理bat文件
  2. 关于召开“CIE2019第三届中国IT教育论坛”的通知
  3. MPCS-314 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动 完美代替TLP5701
  4. 是时候废除“网络君主制”啦?认识 Usenet ~
  5. Android OpenGL ES (十三) 视频播放器
  6. ai文字渐变_AI文字教程,用AI制作立体渐变环绕文字
  7. 杂事缠身总分神,不妨试试番茄钟,亲测有效
  8. 入门学术研究和学术论文
  9. 2021年茶艺师(中级)考试题库及茶艺师(中级)考试试卷
  10. MIT线性代数:4.矩阵A的LU分解