文章目录

  • 一、Java介绍
  • 1、基本概念
  • 2、 环境的配置
  • 二、基础内容【Java语言基础】
    • 1、标识符
    • 2、关键字
    • 3、字面值
    • 3、变量
    • 4、数据类型
      • 1.整数型:
      • 2、浮点型
    • 5、运算符
    • 6、 控制语句
      • 从键盘输入和向控制台输出
      • 6.1 控制选择结构语句
      • 6.2 控制循环结构语句
      • 6.1 改变控制顺序语句
    • 7.方法
      • (1).方法的定义
        • 1. 语法结构:
        • 2. 对上述语法结构进行解释说明:
          • 2.1 关于修饰符列表
          • 2.2 返回值类型
          • 2.3 方法名:
          • 2.4 形式参数列表:简称形参
          • 2.5 方法体必须由大括号括起来,方法体当中代码有顺序,遵循自上而下的顺序依次执行。
      • (2). 方法的内存分配
      • (3). 方法的重载
      • (3). 方法的递归
  • 三:面向对象【Java语言核心】
    • 1、面向对象与面向过程
    • 2、 面向对象的三大特征【重点】:
    • 3、类和对象的概念
    • 4、类的定义
    • 5、类的封装性
    • 6、构造函数(构造方法、构造器)
    • 7、对象和引用:
      • 7.1 对象和引用的概念?
      • 7.2 参数的传递?
    • 8、this关键字:
    • 8、static 关键字
    • 9、类的继承
    • 10、方法的覆盖
    • 11、多态
    • 11、final关键字
    • 12、package
    • 13、访问控制权限
    • 14、super关键字
      • 1、super的使用
      • 2、super关键字与this关键字的对比:
      • 3、什么情况下不能省略super关键字?

大数据学习路线,从零开始学大数据,学习不迷路

一、Java介绍

1、基本概念

2、 环境的配置


二、基础内容【Java语言基础】

1、标识符

1、什么是标识符?
-在Java程序中以程序员命名的单词为标识符
-标识符可以标识:;类名、方法名、变量名、常量名、接口名
2、标识符的命名规则:

  • 以数字,字母,下划线_ ,和美元符号$ 组成,不能包含其他符号
  • 不能以数字开头
  • 严格区分大小写
  • 关键字不能做标识符
  • 理论上没有长度限制,但不建议太长

3、标识符的命名规范
只是一种规范,不属于语法,不遵守规范编译不会报错

最好见名知意

遵守驼峰命名方式

  SystemServiceUserService

类名,接口名: 首字母大写,后面每个单词首字母大写

变量名、方法名: 首字母小写,后面每个单词首字母大写

常量名: 全部大写

2、关键字

关键字在Java语言中全部是小写
常见的关键字有:
public
class
static
void
if
while

3、字面值

 字面值: --10 、100--“abc”--'a'--true、false

字面值就是数据

字面值是Java源程序的组成之一。包括标识符和关键字它们都是Java源程序的组成部分

数据在计算机语言中也是有类型的:【数据类型】

  --10 、100          整数型字面值--3.14              浮点型字面值--'a'、‘人’         字符型字面值          --“abc”             字符串型字面值--true、false       布尔型字面值

3、变量

什么是变量?

  • 变量本质来说是内存的一块空间,这块空间有:数据类型、名字、字面值。
  • 变量包含三部分:数据类型、名称、字面值【数据类型】

数据类型的作用?

  • 不同的数据有不同的数据类型,不同的数据类型底层会分配不同大小的空间
  • 数据类型是指导程序在运行阶段应该分配多少内存空间

变量要求:

  • 变量储存的具体的“数据”必须和变量的“数据类型”一致,当不一致时编译会报错
  • 在同一个作用域中,变量名不能重名,但变量可以重新赋值

变量的作用域:

  • 变量的作用域,描述的是变量的作用范围,在什么范围之内是可以被访问的,只要出了这个范围变量就无法访问了。
  • 变量除出了大括号就不认识了
  • 在不同的作用域中,变量名可以重名
  • 在同一个作用域中,变量名不可以重名

4、数据类型

基本数据类型(四大类八大种)

  • 第一类 :整数型 byte(1字节) 、 short(2字节) 、 int(4字节) 、long(8字节)
  • 第二类 :浮点型 float (4字节)、 double(8字节)
  • 第三类 : 布尔型 boolea(1字节)
  • 第四类 : 字符型 char (2字节)

二进制:

         数据的一种表示形式,十进制表示满十进一例如:十进制1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20二进制 1   10(2)  11(3)  100(4)  101(5).......

计算机二进制有三种表示方式:
原码、反码、补码
计算机在任何情况下底层表示和储存数据的时候都采用了补码形式
正常的补码:和原码相同
负数的补码:负数的绝对值对应的二进制码所有二进制取反,再加1

子节(byte):

    1 byte = 8 bit 【1 个字节等于8个比特位】 (1个比特位等于二进制位: 0 或 1)1 KB   = 1024 Byte1 MB   = 1024 KB1 GB   = 1024 MB1 TB   = 1024 GB1 TB = 1024 * 1024 * 1024 *1024 * 8

数据类型的取值范围

  • 关于Java中的数字类型,数字都是有正负之分的,所以数字的二进制当中有一个二进制为称为“符号位”,在二进制的最左边,0 表示正数,1 表示负数
  • Byte类型最大值: 011111111

转义字符:

 \n : 换行\t : 制表符\ +字符 : 输出字符  如: ' \\ ' 输出: \

1.整数型:

整数型字面值有三种表示方式

  1. 十进制【一种缺省默认的方式】 如: 10 (10)
  2. 八进制【在编写八进制整数型字面值时以0开始】 如:010 (8)
  3. 十六进制【在编写十六进制整数型字面值时以0x开始】 如: 0x10 (16)

数据类型转换:

小容量向大容量转换,自动类型转换
大容量向小容量转换,强制类型转换,要加强制类型转换符 :      (数据类型)变量

2、浮点型

float 单精度【4个字节】
double 双精度【8个字节,精度较高】

 在Java中,所有的浮点型字面值默认当作double类型来处理要想该字面值当作float类型来处理,要在字面值后面添加 f / F

5、运算符

  • 算术运算符

     +求和-相减* 乘积/ 商 % 求余数++ 自加1--  自减1注意:一个表达式中有多个运算符,运算符有优先级,不确定的用小括号,优先级提升
    
  • 关系运算符

    >  大于
    >= 大于等于
    <  小于
    <= 小于等于
    == 等于
    != 不等于
    = 是赋值运算符 ,  == 是关系运算符
    关系运算符的运算结果一定是布尔类型 : true / false
    
  • 逻辑运算符

    &   逻辑与 (两边都是true,结果才是true)
    |   逻辑或 (两边有一个是true,结果就是true)
    !  逻辑非 (取反,!false就是true,这是一个单目运算符)
    ^   逻辑异或 (两边的结果只要不一样,结果就是true)
    &&  短路与   如果前面的算子能判断出结果,后面的算子就不再执行
    ||  短路或  如果前面的算子能判断出结果,后面的算子就不再执行1.逻辑运算符的算子两边都要是布尔类型,而且运算的结果也应该是布尔类型
    
  • 赋值运算符

    =     等于(赋值给变量)
    +=  加等于  如: i += 2      既 i = i+2
    -=  减等于
    *=   乘等于
    /=  除等于
    %=  取余等于先执行等号右边的表达式,将执行结果赋值给左边的变量
    
  • 三元运算符

     1、语法规则:布尔表达式  ? 表达式1 : 表达式22、三元运算符的执行原理?当布尔表达式的结果是true的时候,表达式1作为整个表达式的执行结果当布尔表达式的结果是false的时候,表达式2作为整个表达式的执行结果
    

6、 控制语句

从键盘输入和向控制台输出

向控制台输出: System.out.println();
接受键盘的输入: java.until.Scanner s = new java.Scanner(System.in);  //创建键盘扫描对象String userInputContent = s.next();  // 以字符串的形式接收

6.1 控制选择结构语句

  • if、if else语句

     if语句的语法结构,有四种:第一种:
    
  if(布尔表达式){Java语句;Java语句;.............}
    第二种:
  if(布尔表达式){Java语句;Java语句;.............}else{Java语句;Java语句;.............}
     第三种:
   if(布尔表达式){Java语句;Java语句;.............}else if (布尔表达式){Java语句;Java语句;.............}  else if (布尔表达式){Java语句;Java语句;.............}  else if (布尔表达式){Java语句;Java语句;.............}
                只要有一条语句满足条件,执行完那条语句后控制语句结束第四种:
if(布尔表达式){Java语句;Java语句;.............}else if (布尔表达式){Java语句;Java语句;.............}  else if (布尔表达式){Java语句;Java语句;.............}  else if (布尔表达式){Java语句;Java语句;.............} else{Java语句;Java语句;.............}
                当所有if else语句没有执行,最后执行else语句注意:1.所有语句可以嵌套使用,只要合理嵌套就行2.第二种和第四种可以保证分支百分百会执行
  • switch语句

        1.属于选择结构,也是分支结构2.语法结构:
    
switch(int或String类型的字面值或变量){case int 或 string类型得到字面值或变量:Java语句;........case int 或 string类型得到字面值或变量:java 语句;.......break;default:java 语句;.......
}
  3.switch语句的执行原理:switch后面小括号中的”数据“和case后面的”数据“进行一 一匹配,匹配成功的分支执行。按照自上而下的顺序依次匹配4.匹配成功的分支执行,当后面有break,整个switch语句终止。5.匹配成功的分支执行,后面没有break,直接进入下一个分支执行(不进行匹配)这种现象称为穿透现象【提供break,语句可以避免被穿透】6.所有分支都没有匹配成功,当有default语句时,会执行default分支当中的程序。7.case可以合并:
int i= 10;
swicth(i){case 1:case 2: case :10:System.out.print("Test!")
}

6.2 控制循环结构语句

  • . for 语句
  1. 语法结构:

for(初始化表达式;布尔表达式;更新表达式){
//是需要重复执行的代码片段【循环体:由java语句组成】
}

  1. for循环执行过程/执行原理

     初始化表达式 ,布尔表达式 , 更新表达式都不是必须的!初始化表达式最先执行,并在整个for循环中只执行一次布尔表达式的结果只能是true/ false,不能是其他值for循环执行过程:1.先执行初始化表达式,并且该表达式只执行一次2.判断布尔表达式是true还是false,- 布尔表达式true 执行循环体执行更新表达式判断布尔表达式是true还是false-  布尔表达式true 执行循环体执行更新表达式判断布尔表达式是true还是false..................-布尔表达式false循环结束- 布尔表达式false循环结束
    
//例题   --输出1到10for (i = 1 ; i < = 10 ; i++)System.out.print(i);// 死循环for(;;)System.out.print("死循环");// 输出九九乘法表
for( int i = 1; i<10;i++){for(int j = 1; j < =i; j++){System.out.print(j + "*" + i + "=" + i*j +" ");}System.out.println()
}
//输出结果:1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
  • while 语句

     1. while 循环的语法结构:while(布尔表达式  True){循环体;}2. while循环的执行原理:先判断布尔表达式的结果:* true -执行循环体*  判断布尔表达式的结果:*true-执行循环体           *  判断布尔表达式的结果:...................*false 循环结束。3.  while循环的循环次数:0 ~ N 次注意:while循环的循环体可能执行次数为0次
    
  • do while语句

       1. do .....while 循环的语法结构:                 do {循环体;}  while (布尔表达式);2. do.....while 循环的执行原理:3. do.....while循环的执行次数:循环体代码片段执行的次数是 : 1~N次【至少一次】4. do.....while循环的注意事项:循环语句最终有一个分号
    

6.1 改变控制顺序语句

  • break
  • continue

7.方法

(1).方法的定义

1. 语法结构:

             【修饰符列表】返回值类型 方法名(形式参数列表){方法体;}

2. 对上述语法结构进行解释说明:

2.1 关于修饰符列表
        *  可选项,不是必须的* 目前统一写成 public static * 方法的修饰符中有static关键字的话,怎么调用这个方法?-  类名.方法名(实际参数列表);
2.2 返回值类型
     * 什么是返回值?一个方法是可以完成某个特定的功能,这个功能结束之后大多数要返回最终的执行结果,执行结果可能是一个具体存在的数据。而这个具体存在的数据就是返回值。* 返回值类型都可以是哪些数据类型呢?Java任意一种类型都可以,包括基本数据类型和所有的引用数据类型* 也可能这个方法执行后不返回任何数据,Java中规定,当一个方法执行结束之后不返回任何数据的话,返回值的类型必须编写:void关键字    * 返回值是 “ void”的时候,在方法体中不能编写“  return  值 ;” 这样的语句,但可以编写“ return ;” 语句。*返回值不是void的时候1.  要求方法必须百分百的执行“return”值;这样的语句来完成值的返回。没有这个语句会报错2. 一个方法有返回值的时候,当我们调用这个方法,方法返回了一个值,对于调用者来说,这个返回值可以选择接收,也可以选择不接收,但大部分情况都是选择接收。* 只要带有return 关键字的语句,这个语句所在的方法结束
2.3 方法名:
     * 只要是合法的标识符就行* 方法名最好见名知意* 方法名最好是动词* 方法名首字母小写,后面每个单词首字母大写*
2.4 形式参数列表:简称形参
     * 形参是局部变量,int a ; double b ; float  c ; String s ;......      * 形参的个数可以是: 0~N个* 多个形参之间用“逗号” 隔开* 形参中起决定性作用的是形参的数据类型,形参的名字是就是局部变量的名字。* 方法在调用的时候,给这个方法传递的真实数据就是实际参数,简称实参* 实参列表和形参列表必须满足:数量相同和类型对应相同例如:方法定义public static int sum (int a ,int b ){}方法调用sum(“abc”,“def”);编译器报错sum (10,20);  成功编译**
2.5 方法体必须由大括号括起来,方法体当中代码有顺序,遵循自上而下的顺序依次执行。
  并且方法体y由Java语句构成,每个java语句以 “;” 结尾3.方法怎么调用?方法只定义不去调用是不会执行的, 只有在调用的时候才会执行语法规则: 《方法的修饰符列表当中static》类名.方法名(实参列表);<只是一条Java语句 ,表示调用某个类的某个方法传递这样的实参>

(2). 方法的内存分配

(3). 方法的重载

 方法重载:1.  方法重载又被称为:overload2. 什么时候考虑方法重载呢?* 功能相似的时候,尽可能让方法名相同。【但是,功能不同 /  不相似  的时候,尽可能让方法名不同】3.  什么条件构成了方法重载?* 在同一个类中* 方法名相同* 参数列表不同-数量不同-顺序不同 -类型不同4. 方法重载和什么有关系?和什么没有关系?* 方法重载和方法名+参数列表有关* 方法重载和返回值类型无关* 方法重载和修饰符列表无关

(3). 方法的递归

 1. 什么是递归?方法自身调用自身a(){a();}2.  递归是很耗费栈内存的,递归算法可以不用的时候尽量不去使用。3. 以下程序在执行的时候发生了一个这样的错误【不是异常,是错误error】java.lang.StackOverflowError栈内存溢出错误错误发生无法挽回,只有一个结果,就是JVM停止工作。4. 递归必须有结束条件,没有结束条件一定会发生栈内存错误。5. 递归有结束条件,即使条件是正确的,也可能发生栈内存溢出错误,因为递归太深了注意:递归能不使用尽量别用但有些情况下该功能的实现必须依靠递归方式。

递归原理图:


三:面向对象【Java语言核心】

1、面向对象与面向过程

  • 面向过程和面向对象的区别:

           -面向过程:主要关注点是: 实现的具体过程,因果关系【集成显卡的开发思路】* 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低。* 缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑, 另外面向过程的方式导致软件元素之间的 “ 耦合度 ” 非常高,只要其中一环出现问题,整个系统受到影响,导致最终的软件 “ 扩展力 ” 差,另外,由于没有独立体的概念,所以无法达到组件复用。-面向对象:主要关注点是:主要关注对象【独立体】能完成哪些功能【独立显卡的开发思路】* 优点: 耦合度低,扩展力强。更容易解决现实世界中更复杂的业务逻辑,组件复用性强。* 缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。-C语言是纯面向过程的、C++是半面向对象、Java是纯面向对象-目前出现的一些新的编程语言多数都是面向对象的,人在认识现实世界的时候以面向对象的方式。-面向对象更符合人的思维方式。
    

2、 面向对象的三大特征【重点】:

       - 封装- 继承- 多态所有面向对象的编程语言都有者三大特征。 采用面向对象的方式开发一个软件,生命周期当中:【整个生命周期中贯穿使用OO面向对象方式】* 面向对象的分析:OOA* 面向对象的设计:OOD* 面向对象的编程:OOP

3、类和对象的概念

     *3.1 什么是类?- 类在现实世界中是不存在的, 是一个模板,是一个概念,是人类经过大脑思考抽象的结果    - 类代表了一类事物- 在现实世界中,对象a与对象b之间有相同的特征,进行抽象总结出一个模板,这个模板称做 “ 类 ”。* 3.2 什么是对象? - 对象是实际存在的个体,现实世界当中实际存在。* 3.3 描述一下整个软件开发的过程:* 程序员先观察现实世界,从现实世界中寻找对象* 寻找了N个多对象之后,发现所有的对象都有共同特征* 程序员在脑海中形成了一个模板【类】* java程序员可以通过Java代码来表述一个类* Java程序中有了类的定义* 然后通过类可以创建对象* 有了对象之后,可以让对象直接协作起来形成一个系统。        * 类 -- 【实例化】-- >对象* 对象又被称为实例 / instance* 对象-- 【抽象】--> 类* 重点:类描述的是对象的共同特征。共同特征例如:身高特征这个身高在访问的时候,必须先创建对象,通过对象去访问这个特征。因为这个特征对应具体的某个对象上之后,值不同。有的对象1.80,有的对象身高1.70   * 3.4 一个类主要描述什么信息呢?一个类主要描述的是  状态 + 动作 。状态信息:名字、身高、性别、年龄动作信息:学习、吃饭、睡觉、跳舞状态--> 一个类的属性 动作--> 一个类的方法* 类{属性:// 描述对象的状态信息方法:// 描述对象的动作信息           }注意:状态和动作当具体到某个对象上之后,发现最终的结果可能不一样。

4、类的定义

  语法结构:[ 修饰符列表 ] class 类名{属性;方法;}

例如:

      学生类,描述所有学生对象的共同特征:学生对象有哪些状态信息:* 学号【int】* 名字【string】* 性别【boolean】* 年龄【int】         ......学生对象有哪些动作信息:* 吃饭* 睡觉* 学习* 玩* 唱歌* 跳舞......

重点:属性通常是采用一个变量的形式来完成定义的

    int  no;int age;string name;string address;boolean sex;
  • 基本数据类型
    byte
    short
    int
    long
    float
    double
    boolean
    char

  • 引用数据类型
    String.class sun提供的
    System.class sun提供的

    Student.class 程序员自定义的
    User.class 程序员自定义的

  • java语言中所有的class都属于引用数据类型。

  • 对象创建的内存分配

    访问实例变量的语法格式:
    读取数据:引用.变量名
    修改数据:引用.变量名 = 值

5、类的封装性

封装的好处:

封装的步骤:


6、构造函数(构造方法、构造器)

关于java类中的构造方法:

  1. 构造方法又称为构造函数 / 构造器 / Constructor

  2. 构造方法语法结构:
    [ 修饰符列表 ] 构造方法名(形参列表){
    构造方法体;
    }

  3. 回顾普通方法的语法结构:
    [ 修饰符列表 ] 返回值类型 方法名(形参列表){
    方法体;
    }

  4. 对于构造方法来说,“返回值类型”不需要指定,并且也不能写void,
    只要写上void,那这个方法就变成普通方法了。

  5. 对于构造方法来说,构造方法名一定要与类名保持一致。

  6. 构造方法的作用?
    构造方法的意义是,通过构造方法的调用,可以创键对象。

  7. 构造方法怎么调用的?

    • 普通方法是这样调用的:
      方法修饰符中有static的时候: 类名.方法名(实参列表)
      方法修饰符中没有static的时候: 引用.方法名(实参列表)
    • 构造方法怎么调用:
      new 构造方法体(实参列表)
  8. 构造方法调用执行之后,有返回值吗?
    每一个构造方法调用执行之后都有返回值,但是这个 “ return 值;” 这样的语句不用写。构造方法结束的时候自动返回值 。
    并且返回值类型是构造方法所在类的类型。由于构造方法的返回值就是类本身,所以返回值类型不需要写。

  9. 当一个类中没有定义任何构造方法,系统默认会给改类提供一个无参数的构造方法,这个构造方法被称为缺省构造器。

  10. 当一个类显示的构造方法定义出来了,那么系统则不再默认为这个类提供省构造器。建议开发过程中手动的为当前类提供无参数构造方法。因为无参数的构造方法太常用了。

  11. 构造方法支持重载机制。在一个类当中编写多个构造方法,这多个构造方法显然已经构成方法重载机制。

构造方法的作用:

  1. 创建对象
  2. 创建对象的同时,初始化实例变量的内存空间。

7、对象和引用:

7.1 对象和引用的概念?

       * 对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象。* 引用:是一个变量,不一定是局部变量,还可能是成员变量。引用保存了内存地址,指向了堆内存的对象* 所有访问实例相关的数据,都需要通过 “ 引用. ” 的方式访问,因为只有通过引用才能找到对象。* 只有一个空的引用,访问对象的实例相关的数据会出现空指针异常。class Student{Computer  com ; // com是一个引用【实例变量】public static void dosome(){Computer cc ;    // cc是一个引用【局部变量】}}

7.2 参数的传递?

传递值:


方法调用的时候,涉及到参数传递的问题,传递的时候,Java只遵循一种语法机制,
就是将变量中保存的 “ 值 ” 传递过去了,只不过有的时候这个值是一个字面值,有的时候
这个值是另一个java对象的内存地址ox1234

传递对象的地址:

8、this关键字:

  1. this 是一个关键字,翻译为:这个
  2. this是一个引用,this是一个变量,this变量中保存了地址指向了自身。this存储在Jvm堆内存Java对象内部
  3. 创建100个Java对象,每一个对象都有this。也就是说100个有不同的this。
  4. this可以出现在 “ 实例方法 ” 当中,this指向当前正在执行这个动作的对象。(this表示当前对象)
  5. this在多数情况下都是可以省略不写的。
  6. this不能使用在带有static的方法当中。

 在带有static的方法中不能 “ 直接 ” 访问实例变量和实例方法。因为实例变量和实例方法都需要有对象的存在。而static的方法当中是没有this的,也就是说当前对象是不存在的。自然无法访问当前对象的实例变量和实例方法。

“ this. ”什么时候不能省略?

用来区分局部变量和实例变量的时候,“ this. ”不能省略。



this可以用在哪里:

  1. 可以用在实例方法当中,代表当前对象【语法格式:this.】
  2. 可以使用在构造方法当中,通过当前的构造方法调用其他的构造方法【语法格式:this(实参);】

重点【记忆】:this()这种语法只能出现在构造方法的第一行。

8、static 关键字

  • 什么时候成员变量声明为实例变量呢?

       所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性具体的值不同。】
    
  • 什么时候成员变量声明成静态变量呢?

       所有对象都有这个属性,并且所有对象这个属性的值都是一样的,建议定义为静态变量,节省内存的开销。
    

静态变量在类加载的时候初始化,内存在方法区中开辟。访问的时候不需要创建对象,直接使用“类名.静态变量名”的方式访问。

关于Java关键字中static语句:

  1. static英语单词翻译成静态的
  2. static修饰的方法是静态方法
  3. static修饰的变量称为静态变量
  4. 所有static修饰的元素都称为静态的,都可以使用“类名.”的方式访问,当然也可以用“ 引用. ” 的方式访问【但不建议】
  5. static修饰的所有元素都是类级别的特征,和具体的对象无关。

可以使用static关键字来定义 “ 静态代码块 ” :

  1. 语法格式:
    static{
    Java语句;
    }
  2. 静态代码块在类加载时执行,且只执行一次。
  3. 静态代码块在类中可以编写多个,并且遵循自上而下的顺序依次执行。
  4. 静态代码块的作用是什么?怎么用?用在哪?什么时候用?
    - 这和具体的需求有关,例如项目中要求在类加载的时刻 / 时机执行代码完成日志的记录。
    那么这段记录的代码就可以编写到静态代码块当中,完成日志记录。
    - 静态代码块是java为程序员准备一个特殊的时刻,这个特殊的时刻被称为类加载时刻。
    若希望在此刻执行一段特殊的程序,这段程序可以直接放到静态代码块当中。
  5. 通常在静态代码块当中完成预备工作,先完成数据的准备工具,例如:初始化连接池,解析XML配置文件…

实例代码块:



一个类中可以有这些:

9、类的继承

  • Java语言当中的继承
  1. 继承是面向对象的三大特征之一,分别是:封装、继承、多态。

  2. 继承“基本”作用是:代码复用。但是继承最“重要”的作用是:有了继承才有了以后“方法的覆盖”和“多态机制”。

  3. 继承语法格式:
    [修饰符列表] class 类名 extends 父类名{
    类体 = 属性 + 方法
    }

  4. Java语言当中的继承只支持单继承,一个类不能同时继承多个类,只能继承一个类。

  5. 关于继承的一些术语:
    B类继承A类,其中:
    A类称为:父类、基类、超类、superclass
    B类称为:子类、派生类、subclass

  6. 在Java语言当中子类继承父类都继承哪些数据?
    * 私有的不支持继承
    * 构造方法不支持继承
    * 其他数据都可以被继承

  7. 虽然Java语言当中只支持单继承,但一个类也可以间接继承其他类,例如:
    C extends B {
    }
    B extends A {
    }
    A extends T{
    }
    C类继承B类,但是C类间接继承 T 、A 类。

  8. Java语言中假设一个类没有显示的继承任何类,该类默认继承JavaSE库当中提供的java.lang.Object类。

10、方法的覆盖

  • 回顾Java语言当中方法的重载:

    1. 方法重载又称 :Overload

    2. 方法重载什么时候使用?
      当在同一个类当中,方法完成的功能是相似的,建议方法名相同,这样方便程序员的编程。
      就像在调用一个方法似的,代码美观。

    3. 什么条件满足之后构成方法的重载?
      * 在同一个类中
      * 方法名相同
      * 参数列表不同:类型、顺序、个数

    4. 方法重载和什么无关?
      * 和方法的返回值类型无关
      * 和方法的修饰符列表无关

  • 关于Java语言中方法的覆盖:

    1. 方法覆盖又被称为方法重写:override 【官方的】/ overwrite

    2. 什么时候使用方法重写?
      * 当父类的方法已经无法满足当前子类的业务需求。
      * 子类有必将父类继承过来的方法进行重新编写

    3. 什么条件满足之后发生方法重写?【代码满足什么条件之后,就构成方法的覆盖呢?】

      • 方法重写是发生在具有继承关系的父子类之间
      • 方法重写的时候:返回值类型相同、方法名相同、形参列表相同
      • 方法重写的时候:访问权限不能更低,可以更高。
      • 方法重写的时候:抛出异常不能更多,可以更少。
    4. 建议方法重写的时候尽量复制粘贴。 不要编写,容易出错,导致,没有产生覆盖。

    5. 私有方法不能继承,所以不能覆盖
      构造方法不能继承,所以不能覆盖
      静态方法不存在覆盖。
      覆盖只针对方法,不谈属性。

11、多态

多态的基础语法:


使用多态语法机制:


向下兼容转型:

  • 当两个子类之间进行强制转换时,由于两个子类不存在继承关系,会出现著名的异常:java.lang.ClassCastException
  • 类型转换异常, 这种异常总是在“向下转型”的时候会发生

向下转型:
Animal a3 = new bird();
cat c3 = (cat)a3;

    1. 以上异常只有在强制类型转换时才会发生,也就是“向下转型”存在隐患(编译过了,但是运行错了!)2. 向下转型只要编译通过,运行一定不会出现问题: Animal a = new Cat()3. 向下转型编译通过,运行可能出现错误: Animal  a3 = new Bird();  Cat c3 = (Cat)a3;4. 怎么避免向下转型出现ClassCaseEception呢?使用instanceof(实例) 运算符可以避免以上的异常。5. instanceof运算符怎么使用呢?5.1、语法格式 :(引用 instanceof 数据类型名)5.2、以上运算符的执行结果类型是布尔类型,结果可能是true / false5.3、关于运算结果true/ false:假设:(a instanceof Animal)true表示:a这个引用指向的对象是一个Animal类型。false表示:a这个引用指向的对象不是一个Animal类型。if(a3 instanceof Cat) {Cat  c3 = (Cat)a3; }else if (a3 instanceof Bird ){Bird b2 = (Bird)b3;}
  1. java规范中要求:在进行强制类型转换前,建议采用instanceof运算符进行判断,避免ClassCastException异常的发生

多态在实际开发过程中的作用:
以主人喂养宠物为例说明多态的作用:

  1. 分析:主人喂养宠物这场景实现需要进行类型的抽象:
    - 主人【类】
    - 主人可以喂养宠物,所以主人又喂养的动作
    - 宠物【类】
    - 宠物可以吃东西,所以宠物有吃东西的这个动作

  2. 面向对象编程的核心:定义好类,然后将类实例化成对象,给个环境驱使一下,让各个之间协作成一个系统。

3.多态的作用是什么?

   降低程序的耦合度,提高程序的扩展力。能使用多态尽量使用多态父类型引用指向子类型对象

核心:面向抽象编程,不要面向具体编程。

11、final关键字

关于Java语言当中的final关键字:

 1. final是一个关键字,表示:最终的,不可改变的2. final修饰的类无法被继承3. final修饰的方法无法被覆盖4. final修饰的变量一旦赋值之后,不可重新赋值5. final修饰的实例变量,必须手动赋值,不能采用系统默认赋值6. final修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收。final修饰的引用虽然指向某个对象之后不能在指向其他对象,但是所指向的对象内部的内存也是可以被修改的。7. final修饰的实例变量,一般和static联合使用,被称为常量。


对于以后学习的类库,一般是包括三个部分:
- 源码【可以看源码来理解程序】
- 字节码【程序开发过程中使用的就是这部分】
- 帮助文档【对源码的解释说明被提取出来,更方便程序的开发】

注意使用的时候版本统一。

12、package



13、访问控制权限

  • 访问控制权限修饰符:

     1. 访问控制权限修饰符来控制元素的访问范围2. 访问控制权限符包括:public         表示公开的,在任何位置都能访问protected      同包、同类下可以访问缺省           同包下可以访问private        表示私有的,只能在本类访问3.  访问控制权限符可以修饰类、变量、方法......4.  当某个数据只希望子类使用,使用protected进行修饰。5. 修饰符的范围:private < 缺省 < protected < public
    

14、super关键字

1、super的使用

2、super关键字与this关键字的对比:


3、什么情况下不能省略super关键字?

  • super不是引用,也不保存内存地址,super也不指向任何对象。
  • super只是代表当前对象内部的那一块父类型的特征。
  • this和super都不能用在静态方法static当中。

从零开始学Java【JavaSE入门】相关推荐

  1. JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】

    http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA         从零开始学JAVA?YES!本刊内容全部为午饭redking整理.撰写,所涉及内容均为原创,非 ...

  2. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  3. 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求

    论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...

  4. windows java eclipse_从零开始学 Java - Windows 下安装 Eclipse

    三观是什么鬼 当我们在讨论「三观一致」的时候是在讨论些什么? 我认为这个世界上本没有「三观」这一说法,说的人多了,也就有了「三观」这个词,当我们讨论「三观一致」其实并不是真的在说世界观.价值观.人生观 ...

  5. 从零开始学java(二十六)--多维数组,多维数组存储表格数据

    从零开始学java(二十六)--多维数组 多维数组 多维数组存储表格数据 多维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(学习 ...

  6. 网沙(爱玩啥)韩顺平.循序渐进学.java.从入门到精通系列视频分享

     网沙(爱玩啥)韩顺平.循序渐进学.java.从入门到精通系列视频分享 韩顺平.循序渐进学.java.从入门到精通.第0讲-开山篇 韩顺平.循序渐进学.java.从入门到精通.第1讲-内容介绍.项 ...

  7. 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

    作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 千锋教育高级教研员.CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知, ...

  8. 从零开始学JAVA:二、Java基本语法(四)——流程控制

    从零开始学JAVA:二.Java基本语法(四)--流程控制 程序流程控制 1.顺序结构 2.分支结构 2.1.if-else结构 2.2.switch-case选择结构 2.3.Scanner类的使用 ...

  9. java任务调度定时器,从零开始学 Java - Spring 使用 Quartz 任务调度定时器

    生活的味道 睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈.你向生活微笑,生活也向你微笑. 请你不要询问我的未来,这有些可笑.你问我你是 ...

最新文章

  1. 怎么把项目推到gitlab上_将本地项目添加到 GitLab 上管理
  2. androidstudio常见问题
  3. 头条号为什么把作者抛弃了?
  4. react --- Hook的使用
  5. MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现
  6. 在Python中使用Seaborn和WordCloud可视化YouTube视频
  7. 使用shell脚本或命令行添加、删除 crontab 定时任务
  8. bat小工具_字节跳动收购效率工具幕布,张一鸣的 To B 野心 | 36氪独家
  9. 新手安装Ubuntu操作系统
  10. dockerfile安装oracle,docker通过Dockerfile安装oracle-12c数据库
  11. 错误 Cannot load driver class: com.mysql.jdbc.Driver
  12. 开启Accessibility的快捷方式-3次home键或者侧边键
  13. Exchange Server 2013系列十二:邮箱的基本管理
  14. 正态分布某一点的概率怎么算_标准正态分布+标准正态分布概率表+分布函数+积分...
  15. 电路串联和并联图解_串联电路与并联电路的区别
  16. H5网站接入Paypal支付接口
  17. Taylor Swift looks so much like a supermodel
  18. uni-app注册自动获取短信信息
  19. vue设置页面title
  20. 【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现相关面试题介绍

热门文章

  1. MySQL-复杂问题记录和解决
  2. c++ 严重性代码说明项目文件行错误 C4996‘strcpy‘:
  3. Android ConstraintLayout 约束布局
  4. 【前端笔记】三、前后端通信(http协议和Ajax)
  5. wifi码系统具备什么功能
  6. vlc音视频开发(三)桌面动态壁纸
  7. Waf识别工具和83个Waf拦截页面
  8. 电脑硬盘磁盘不小心被格式化了?如何一键恢复操作教程
  9. C++11新特性之变长参数模板详解
  10. 数据库大作业实验报告