【java】非常多!学习路径24-总结目前所有知识(上)

Posted on 2022-03-24 23:11  罗芭Remoo  阅读(152)  评论(0编辑  收藏  举报

感谢sikiedu.com的siki老师。几年前就开始看siki的课程,最近突然想写这个笔记系列,顺便回顾一下这些基础的知识,同时也希望能帮助到一些人,有问题一起交流哈。

全文共十章,大约1.5万字,适合清扫知识点盲区之用。知识点覆盖全面,涵盖绝大多数基础内容。


第一章 基础知识

1-1 DOS命令(Windows)

操作计算机的两种方式

图形化界面

DOS(磁盘操作系统)DOS就是人给计算机下达命令的

打开DOS

cmd

window+R

1-2 常用DOS命令(输入命令后按下回车)

------目录操作-----

d: 切换盘符

dir 列出来当前目录的所有文件

md 创建文件夹

rd 删除文件夹

cd 打开文件夹

tab 自动补全

. 当前目录 .. 上一个目录

cd \ 或者 cd\ 退回到根目录(盘符目录)

------文件操作------

del a.txt del *.txt

del 目录 表示删除目录下的所有文件

------其他操作------

cls 清屏

exit 退出DOS

上方向键 取得上一个命令

-----计算机常用命令(不区分大小写)---

notepad

Mspaint

Cals

Mstsc

 

计算机快捷键

Ctrl + A Ctrl + S Ctrl + Z Ctrl + X Ctrl + C Ctrl + V Ctrl + N

Home End

 

1-3 Java的历史

百度百科

计算机语言,跟计算机沟通的语言,通过计算机语言可以让计算机干各种他可以干的事情

Java的排行榜

Java可以干什么

JavaEE (Web,网站开发) 网站分为前端和后端

淘宝 京东 工行网银 Amazon Google eBay 我的世界后端

企业内部使用的OA系统 财务系统

哪些网站使用的Java开发的

JavaME 基本没人用

JavaSE 桌面应用程序(什么是桌面应用程序 QQ 百度影音播放器 浏览器 )

Android开发(基于Java语言)

Hadoop大数据

 

1-4 Java是跨平台的

平台是操作系统 Windows Linux Mac

JVM Java虚拟机 Java开发的一个中间软件

JVM包含在JDK里面,下载JDK的时候是需要选择平台的

JDK和JRE

JDK 是 java开发工具包(包含jre)

JRE 是java运行环境

Java开发环境

安装JDK (Java Development Kit Java开发工具包) JDK9(Java SE JDK)

目录不要有中文

卸载(控制面板 卸载程序)

通过Java和Javac命令验证安装的是否正确

Java运行原理图

编译和执行可以通过DOS来完成

 

1-5 HelloWorld.java 第一个Java程序

关于后缀名如何修改

写代码必须全部是英文(除了个别中文字符)

public class HelloWorld{

public static void main(String[] args){

System.out.println("Hello World!");

}

}

javac xx.java

java xx

 

1-6 常见问题:

文件扩展名问题

class写错 Class classs claas

main写错 Main

打印语句问题 System.out.print(“”);

引号问题 ; ;

环境变量的配置

什么作用

怎么配置

配置完重启cmd

Java_Home的作用和配置(jdk安装目录)

classpath

path里面的是exe可执行文件,class是java的运行文件.class文件

安装notepad++(Eclipse MyEclipse)

行号

高亮显示,代码提示

 

1-7 什么是注释

对代码进行解释说明,不会影响程序的运行,编译的时候,会忽略注释,注释就是为了开发人员方便阅读代码使用的!

单行 //

多行 /* */

文档 /** */

1-8 Java标识符

自己定义的东西的名字就是标识符(类名,变量名,方法名)

1,有字母(大写和小写) 数字 下划线_ 美元符$

2,不能以数字开头,不能是关键字

3,区分大小写 main Main

1-9 命名规范(驼峰命名):

见名知意

包:全部小写,以域名开头

com.sikiedu.tools

com.sikiedu.person

类名字:第一个单词首字母大写,后面的单词首字母大写

函数和变量名:第一个单词首字母小写,后面的单词首字母大写

 

 

 

1-10 Java关键字(变色)

https://baike.baidu.com/item/java%E5%85%B3%E9%94%AE%E5%AD%97/5808816?fr=aladdin

全部都是小写的

 

1-11 常量:

字面值常量

字符串,整数,小数,字符,布尔,空常量

自定义常量

1-12 进制

百度百科:https://baike.baidu.com/item/%E8%BF%9B%E5%88%B6/317457?fr=aladdin

进制也就是进位制,是人们规定的一种进位方法。 对于任何一种进制---X进制,就表示某一位置上的数运算时是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。

为什么计算机只识别0和1 https://zhidao.baidu.com/question/191371417.html

为什么0和1可以表示丰富的图形和影视 https://www.zhihu.com/question/36269548

1-13 计算机存储单位

二进制(0b开头) 八进制(0开头) 十进制(默认) 十六进制(0x)

 

1-14 变量

变量类型 变量名 = 初始化值;

 

整数默认为int 小数默认为double类型

变量注意事项:

作用域:定义在哪个大括号内,就在哪个大括号内有效。不能同名在同一个作用域里面。

在使用之前初始化

一行可以定义多个变量,两种写法

一行多条语句

一行一条语句

变量类型一般:

整数类型

浮点类型

字符类型

布尔类型

Notepad++的编码修改为 ANSI编码(中文)

1-15 变量注意事项

作用域(有效范围):定义在哪个大括号内,就在哪个大括号内有效。不能同名在同一    个作用域里面。

在使用之前初始化

一行可以定义多个变量,两种写法

一行多条语句

一行一条语句

1-16 常量final

在运行期间一直不会改变的量成为常量!一、字面值常量,二、自定义常量

怎么自定义常量(一般常量名称都全部大写)

final 数据类型 常量名称 = 值。

定义long或者float类型的时候要加上l(L)和f(F)

定义byte或者short的时候要保证给的值在类型的范围内

char是否可以存储汉字

可以的,因为char占有两个字节,每个汉字也是占用两个字节的

练习题1:

  1. 请写出标识符的命名规则是什么?
  2. 由英文字母、数字、_和$组成,长度不限。
  3. 标识符的第一个字符不能是数字
  4. 标识符区分大小写。
  5. 标识符不能包含空格。
  6. 下列属于正确标识符的选项有[多选]()
  7. int B. $_Count C. 3M     D. Hello  
  8. b-7 F. ms#d G. bool     H. D9658 
  9. java的基本数据类型有哪些?
  10. java的基本数据类型中,有几种可以表示数字?
  11. 写一个程序,输出你的姓名、身份证号、年龄、所在大学、专业、入学年限和学制。

第二章 运算符

2-1 运算符

赋值运算符

=

+=

-=

*=

/=

%=

 

 

a = 3;a = a + b;

x = y = z = 7;//不建议

a x= b; ======>  a = a x b;    x代表 + - * / %

 

2-2 算术运算符(可以对常量和变量进行操作)

规则: 操作数1 运算符 操作数2     int b = a + c;

2-2-1 加减乘除求余

+

可以对整数和浮点数做加法操作

-

可以对整数和浮点数做减法操作

*

可以对整数和浮点数做乘法操作

/

可以对整数和浮点数做除法操作

(两个整数相除得到的还是整数 = 略去小数部分)

如果想要得到小数,需要将其中一个转成浮点数

%

可以对整数和浮点数做求余操作

特殊一:

使用浮点数做运算的时候的不精确性

5.3-4.2

0.08f + 0.01f

6.9*7

7.6%2.0

原因:double 和 float两个类型在java中本身就是非精确存储的,再用两个近 似值去做计算,得到的结果就只能是一个近似值了。

特殊二:

可以使用+对字符串进行组拼,任何类型和字符串相加都会把数据转成字符串,再 进行组拼

a+b+”Hello”

“Hello”+a+b

特殊三:

使用字符做算术运算的时候,会自动把字符转换成对应的数字,然后进行数学运算

 

2-2-2 自增和自减运算符

++

两种用法:放在前面或者放在后面

--

两种用法:放在前面或者放在后面

 

2-2-3 比较运算符

结果为boolean类型(true/false)

<=

>=

==

!=

注意区分 == 和 =

System.out.println(a==b); System.out.println(a=b);

 

2-2-4 逻辑运算符(两边的操作数必须是boolean类型的)

规则: 操作数1 运算符 操作数2

&& (短路 与)

|| (短路 或)

&

|

^ 异或

!非(取反)

与:两边同时满足条件的时候为true(其他情况为false)

或:两边只要满足一个条件结果为true(其他情况为false)

异或:两边结果不一样的时候结果为true(其他情况为false)

 

2-2-5 短路和不短路的区别

当可以通过操作数1判断出来结果的时候,是否运算操作数2(短路表示不运算操 作数2)

 

注意:

1<x<9     1<x && x<9

 

2-2-6 位运算符

计算机是二进制的,所有的数据使用二进制来存储。对于每个二进制来说都有原码、反码和补码。计算机存储数据的时候,使用第一位表示数字的正负,0代表正数,1代表负数。计算机存储正数的时候直接存储正数的原码,存储负数的时候存储负数的补码。(为什么存储补码,而不是原码,这个是为了方便进行数学运算,具体不解释了)

正数:原码、反码和补码相同。

负数:

原码(符号位为1)

反码(符号位不变,其余位数取反)

补码(反码+1)

 

只针对二进制来说的,所以在进行运算之前会转换成二进制,再运算。

& 按位与:对应位都是1才是1

| 按位或:对应位有一个1,就是1

~ 按位取反:1变0,0变1

^ 按位异或:对应位不一样才是1

<< 左移(高位抛弃,低位补0)

>> 右移(高位按照符号位补齐,低位抛弃)

>>>无符号右移(忽略符号位,高位补0,低位抛弃)

 

2-2-7 三元运算符

?:

规则: 布尔表达式表达式1表达式2

如果布尔表达式的结果为true,返回表达式1的结果

如果布尔表达式的结果为false,返回表达式2的结果

案例:

取最大值(两个整数和三个整数)

 

2-3 运算符优先级

默认优先级

通过()控制优先级

 

2-4 数据类型转换

2-4-1隐式类型转换

小类型到大类型会自动转换:byte->short,char->int->long->float->double

虽然float比long小,但是因为存储方法不一样导致float里面可以存储的数据 范围比  long要大(浮点型来说,有一部分是用来表示有效位数的,有一部分是    用来表示多少次方。)

使用情况:

  • 赋值语句
  • 算术表达式中

2-4-2 显式类型转换(也叫做强制类型转换)

把一个大类型赋值给小类型,需要进行前置类型转换

int i = (int)3.3;

long j = (long)3.4f;

int c = ‘a’;//隐式转换

 

练习题2

一、对于以下,有int x = 5, y = 6, z;

 

题目1:z = ++x + y++;

 

题目2:z = ++x + x++;

 

题目3:x = ++x + x++;

 

题目4:z = x > y ? ++x : y++;

二、下列说法正确的是(  ) 

    A、 JAVA程序的main方法必须写在类里面

B、 JAVA程序中可以有多个main方法

C、 JAVA程序中类名必须与文件名一样 

D、 JAVA程序的main方法中如果只有一条语句,可以不用{}(大括号)括起来

三、变量命名规范说法正确的是(  ) 

A、 变量由字母、下划线、数字、$符号随意组成;

B、 变量不能以数字作为开头;

C、 A和a在java中是同一个变量; 

D、 不同类型的变量,可以起相同的名字;

四、下列javaDoc注释正确的是(  ) 

A、 /*我爱北京天安门*/

B、 //我爱北京天安门*/

C、 /**我爱北京天安门*/

D、 /*我爱北京天安门**/

五、为一个boolean类型变量赋值时,可以使用(  )方式 

A、 boolean = 1;

    B、 boolean a = (9 >= 10);

C、 boolean a="真";

D、 boolean a = = false;

六、以下(  )不是合法的标识符 

A、 STRING B、 x3x; C、 void D、 de$f


 

第三章 流程控制

3-1 语句块

以{开始,以}结束

{}

注释事项

  • 遇到单纯的语句块的时候,会直接执行语句块里面的语句,从上到下
  • 语句块可以访问外面定义的变量,外面不能访问语句块里面定义的变量

 

3-2 流程控制

控制程序中语句执行的流程(顺序)。默认是从上到下一条语句一条语句执行。

 

3-3 条件语句

意义:通过条件判断是否执行某些语句

3-3-1 if条件

3-3-1-1 第一种

if(布尔表达式){

//语句,当布尔表达式为true的时候才会执行的语句

}

3-3-1-2 第二种

if(){

//语句

}else{

//语句

}

3-3-1-3 第三种

if(){

}else if(){

}else{

}

3-3-1-4 特殊的用法:

if()

Xxx;

Xxx;

if();

3-3-1-5 注意事项

三元运算符可以实现的都可以使用if语句代替

区别:

三元运算符比较简洁

三元运算符必须返回结果

if语句可以执行多条语句

3-3-2 switch分支语句

结构:

switch(表达式){

case 值1:

语句块1;

break;

case 值2:

语句块2;

break;

...

default:

Default语句块;

break;

}

表达式可以是整数 字符 枚举 字符串

case后面的值必须是常量

break用来中断switch语句

 

3-4 循环语句

完成:创建10个敌人

完成:取得1-100的所有数的和

完成:输出1-10

完成:输出10-1

3-4-1 while循环

while(布尔表达式){

//循环体

}

do ... while循环

do{

//循环体

}while(布尔表达式);

4-3-2 for循环

for(初始化语句;判断条件语句;更新语句){

//循环体

}

注意:

For初始化语句里面定义的变量只能在for循环里面使用

for循环的特殊使用方式

语句的嵌套

输出1-100内的所有偶数

 

循环练习:

  • 求整数1~100的累加值,跳过所有个位为3的数。
  • 循环输出以下结果:
    • 2*5=10
    • 4*10=40
    • 6*15=90
    • ……
    • ?*100=?

3,一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13  米)?

 

3-5 流程控制

3-5-1 break语句(中断语句)

  • switch
  • 循环语句
    • 多层循环的情况下,跳出break所在的循环
    • 可以定义标签,指定跳出哪个循环

3-5-2 continue语句(中断当前循环,继续下次循环)

使用在循环语句中

return

用来结束方法

 

如何接收用户键盘输入的数据

import java.util.Scanner;

 

Scanner s = new Scanner(System.in);

s.nextInt();

练习题3

一、接收用户输入的一个整数,判断它是奇数还是偶数。

二、使用循环语句计算20的阶乘。20!

三、使用循环语句计算1!+2!+3!+ ... + 20!

四、接收三个整数abc,对这个三个整数按照从小打到的顺序进行排列

五、让用户输入一个字符,判断他是小写字母还是大写字母,如果是小写字母的话,就转换成大写字母输出。

六、编写程序,给定一个学生成绩,给出相应等级:

90~100 优秀

80~89 良好

70~79 中等

60~69 及格

0~59 不及格

七、用 while 循环,计算 1~200 之间所有 3 的倍数之和。

八、编写程序,输出 200~500 之间的所有素数。

九、编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡一钱三只,现    有百钱欲买百鸡,共有多少种买法?

十、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该    数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次 方。

十一、猜数字,随机生成一个数字,让用户猜大小,然后提示猜大了或者猜小了,猜不中让    用户一直猜,直到用户猜中,游戏结束,就不需要继续猜了。


第四章 字符串String

4-1 本章学习方法

字符串是比较重要的内容

因为本章会学习到很多API,学习比较容易理解,也会使用,就是比较容易忘,

忘了没有关系,跟着老师做一遍练习,心中有印象,后面使用的时候再回头查阅即可

在使用中慢慢掌握

4-2 怎么表示字符串

4-2-1 字符串常量

需要使用””双引号引起来

“234” “sdfsdf” “中国”

一个字符串不能放在多行,那怎么表示换行呢

4-2-2 字符串变量

String str=”sdfsdf”;

String str=new String(”sdfsdf”);

 

4-3 连接字符串(+)

多个字符串连接

和其他数据连接

通过+可以直接对字符串(或者其他数据类型)常量和变量做连接操作

4-4 字符串的特性

字符串无法被修改

解释(引用类型,基本类型)

内存区域:栈 堆 方法区 运行常量区

字符串值无法被修改,但是字符串对象可以引用别的字符串。

4-5 字符串信息获取

4-5-1 长度

s.length();

4-5-2 查找子字符串的位置

s.indexOf(int c);

s.indexOf(String str);

s.lastIndexOf(String str);

4-5-3 获取指定位置的字符

s.charAt(int index)

4-5-4 获取子字符串

s.substring(int beginIndex);

s.substring(int beginIndex,int endIndex);

4-6 字符串判断:

4-6-1 判断字符串的开始和结尾

s.startsWith(String prefix);

s.endsWith(String suffix);

4-6-2 判断字符串是否相等

==

s.equals(String str);

s.equalsIgnoreCase(String str);

s.compareTo(String str);//compareTo比较的不是字符串是否相等,这里比较的 是字符串的大小,字符串的大小怎么怎么比较呢,按个字符比较相同的字符跳过,    遇到不同的字符,返回字符的差。如果两个字符串,前面几个字符相等,长度不相    等(“siki” “sikiedu”)返回两个字符串的长度差。

4-6-3 判断是否包含某个子字符串

s.contains(String str);

4-6-4 判断字符串是否为空

s.isEmpty();

空的两种状态

String s = “”;//空字符串

String s = null;//空对象

4-7 字符串转换操作

4-7-1 字母大小写转换

s.toLowerCase();

s.toUpperCase();

4-7-2 字符串分割

s.split(String str);

s.split(String str,int limit);

4-7-3 去除空格(前面和后面的空格,不包括中间的空格)

s.trim();

4-7-4 字符串替换

s.replace(char oldChar,char newChar);

s.replace(String oldStr,String newStr);

 

4-7-5 字符串格式化

日期和时间的格式化

 

练习题4

  1. 给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置.如:"abcbcbabcb34bcbd"中,"bcb"子串的出现位置为: 1,7,12.字符串和子串均由用户输入
  2. 在一个字符串中查找一个子串,计算出来这个子串在字符串中出现的次数。
  3. 编写程序将 “jdk” 全部变为大写,并输出到屏幕,截取子串”DK” 并输出到屏幕
  4. 编写程序将String类型字符串”test” 变为 “tset”。
  5. 接收用户输入的一个字符串,判断这个字符串是否对称。
  6. 将一个字符串进行反转。例:”abcdefg”反转成“gfedcba”.
  7. 随机生成4位验证码,由用户输入并验证是否输入正确,如果输入错误就生成新的验证码让用户重新输入,最多输入5次

第五章 一维数组

5-1 数组是用来干嘛的?

假如我们要做一个成绩管理系统,一个班级里面有50个人。

假如我们做的是一个公司的财务管理软件,需要记录每个人的工资,公司有30到1000 个员工。

使用数组可以搞定上面的:

数组可以存储多个类型一致的元素。(任意类型)

5-2 引用类型和基本类型变量创建的不同

基本类型变量声明出来不管是否赋值,都已经分配了内存。

引用类型变量的创建分为两步:声明和初始化

声明只在栈内分配内存(存储引用,或者说存储内存地址)

初始化在堆或者方法区分配内存(存储实际的数据)

new出来的东西放在堆里面

程序运行常量放在方法区里面

5-3 关于栈

所有局部变量都存放在栈里面。

5-4 什么是局部变量?

在方法里面创建的变量都是局部变量,因为只在这个方法内有效。

 

5-5 一维数组的声明、初始化和使用

第一步:声明

声明第一种方式:数组元素类型[] 数组名;

声明第二种方式:数组元素类型 数组名[];

注意:没有初始化的数组是无法使用的。(可以初始化为null)

第二步:初始化

初始化的时间:

可以在声明的时候直接初始化

也可以先声明后初始化

初始化的方式:(初始化的时候必须确定数组的长度)

第一种方式:int[] shuzu = new int[3];//按照默认值初始化 0 

第二种方式:int[] shuzu = new int[]{3,32,34};//长度根据元素个数确定

第三种方式:int[] shuzu = {23,234,23,4}//上面的简化版本,根据元素个数确 定数组长度

数据类型的默认值

基本类型是0(0 0.0 0所代表的字符 false 

引用类型是null

第三步:使用

使用:

通过索引访问数组里面元素,索引是从0开始。

访问方式:数组名[索引]       //可以访问值,也可以设置值

获取数组长度

数组名.length 这里的length是属性,不是方法,不需要加括号

注意事项

数组之间的赋值

引用类型的赋值

下标超出范围 //严重

空引用int[] shuzu = null; 

shuzu[index] //严重

数组的其他操作:

填充数组

Arrays.fill(数组名,值);//使用指定的值填充指定的数组

编程练习5

  1. 一.遍历一个数组中所有的元素,并输出出来
  2. 二.请将’A’,’B’,’C’存入数组,然后再输出
  3. 三.复制数组,将数组里面的数据全部复制到另一个数组里面
  4. 四.取得一个数组里面的最大值和最小值
  5. 五.把数组里面的元素倒置( {234,3,34,25,3} => {3,25,34,3,234} )

for循环的特殊用法

六、现在有如下一个数组: 

int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}; 

要求将以上数组中的0项去掉,将不为0的值存入一个新的数组,生成新的数组为 

int newArr[]={1,3,4,5,6,6,5,4,7,6,7,5}

七、数据查找,有一个数组,里面存储是是整数,从这个里面查找一个指定整数,找到 这个整数所在位置(索引位置)。(查找第一个出现的位置)


第六章 二维数组

6-1 二维数组的声明、初始化和使用

为什么用二维数组?

假如我们要做一个成绩管理系统,一个班级里面有50个人。

假如我们做的是一个公司的财务管理软件,需要记录每个人的工资,公司有40个员工。

对上面的问题进行升级

假如我们要做一个成绩管理系统,我们有10个班级,一个班级里面有50个人。

假如我们做的是一个公司的财务管理软件,需要记录每个人的工资,公司有6个部门, 每个部门有40个员工。

  1. 声明

声明第一种方式:数据类型[][] 数组名;

声明第二种方式:数据类型 数组名[][];

  1. 初始化

初始化第一种方式:数组名=new 数据类型[m][n];

初始化第二种方式:数组名= {{2,5},{1},{3,2,4},{1,7,5,9}};

可以把二维数组当成多个一维数组组成的一维数组,比如这里的就是一个长度 为m 的一维数组,这个数组里面每一个元素都是长度为n的一维数组。(画图 表示二维数组在内存中怎么存储的)

 

初始化第三种方式:数组名= new 数据类型[m][];

m表示里面有多少个一维数组,但是没有给出这个一维数组的长度。这里的每 个一维数组的长度是可以不一样的。

int[][] school= new int[3][];

school[0]=new int[2]; //或者= {xx,x,x,xxx,xx};

school[1]=new int[3]; //或者= {xx,x,x,xxx,xx};

school[2]=new int[1];

 

  1. 使用

格式:数组名[索引][索引]

通过数组名[索引] 得到的是一维数组,完全可以当做一维数做来使用

 

6-2 数组排序

  1、冒泡排序

  2、直接选择排序

编程练习6

  1. 定义一个数组来存储12个学生的成绩{72,89,65,58,87,91,53,82,71,93,76,68},计算 并输出学生的平均成绩。
  2. 在歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉 一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。输入每个 评委的评分,求某选手的得分。
  3. 声明一个int型的数组,循环接收8个学生的成绩,计算这8个学生的总分及平均分、 最高分和最低分。

第七章 类和面向对象编程-初级

7-1 什么是面向对象编程?

意思是交个女朋友,面对女朋友编程吗?

很多程序中的概念,实际的意思跟它表面的意思会有一些不一样。

假如我们要开发一个坦克大战的游戏

我们这个游戏有一些属性

当前剩余多少条命(没命的话,游戏结束,开始有3条命)

当前游戏的分数(每次杀死敌人得分)

Boss是否死亡(死亡重新开始游戏,损失一条命)

我们有一个主角(坦克)它有一些属性

等级(等级越高,攻击力越强,初始1级)

当前血量

我们有一些种类的敌人

普通敌人,铜敌人,黄金敌人

不同敌人的攻击力和血量不一样

敌人可以自己移动

交互

可以控制主角移动

可以发射子弹攻击敌人

敌人会自动追踪主角,并进行攻击

 

在我们写的程序有很多的代码的时候,我们可以把程序中的东西进行分类,跟主角相关的是一类,跟敌人相关的是一类,跟整个游戏相关的是一类。

通过分类可以让程序变得更加有结构。在程序中可以使用类(class)对代码进行分类,当使用类编程的时候,使用创建出来的变量称之为一个对象。这就是传说中的面向对象编程。

 

面向对象和面向过程的区别。面向过程里面没有对象,强调的开发一个功能的步骤和过程,一步一步类,面向对象我们操作处理的是一个个的对象,(详细的每个功能的步骤和过程都封装在了类里面,通过类分类划分模块)程序更加结构化。(更加适合开发大型项目,更加便于后期的维护)

 

如何通俗易懂地举例说明“面向对象”和“面向过程”有什么区别?

https://www.zhihu.com/question/27468564

 

7-2 面向对象(类、对象)的三个特征:

封装、继承、多态(后面慢慢理解)

 

一个类表示一个类别(比如上面的例子,有主角 敌人 游戏管理系统)

通过一个类管理这个类别的所有相关的东西。比如敌人,主角

 

我们可以定义一个人主角类,来控制主角相关的属性和行为(方法)的管理。

这里所说的属性和行为,在我们程序中叫做成员变量、成员方法。

 

7-3 怎么定义类?

class 类名{

//成员变量(这个类有的属性)

//成员方法(这个类有哪些行为,有哪些功能)

}

怎么声明对象

类名 对象名;

定义好了类,为什么要利用类定义变量(对象)?

一个类相当于一个模板,利用模板可以生产实例。

类相当于车工厂里面的车模(模具),利用车模可以生成可以实际使用的很多辆车。

类==车模  对象==车

(敌人类 和 很多个敌人)

 

分析下主角类有哪些属性和行为?

 

如何利用类创建对象?

 

使用属性、调用行为

 

大象装进冰箱问题

分析有哪些类

大象类,冰箱类

 

对象之间的赋值(引用的赋值)

 

7-4 成员变量和局部变量

定义的位置

什么时候占用内存

所占用内存的位置

什么时候所占内存被销毁

初始值

 

当把一个对象当做一个方法的参数的时候

因为类是引用类型,所以在方法内修改引用类型里面的数据的时候,原引用类型里面的    数据也被修改了!

 

7-5 什么是匿名对象?

如果这个对象只使用一次的时候

Java中的垃圾回收机制GC(JVM)

 

7-6 开发教务管理系统

如果我们要开发一个教务管理系统。这个教务管理系统是给学校使用的,用来管理学生和老师的,比如学生的成绩信息管理,老师所有信息管理...等。

 

学生类创建

老师类创建

 

对象是如何在内存中存储的

 

7-7 访问修饰符 private

(项目开发中,我们开发的类不止给我们自己使用也给团队中的其他人使用)

可以修饰成员变量,可以修饰成员方法

7-8 封装:

把不需要外界访问的属性都隐藏起来

提供方法让外界访问

优点:

让代码结构更加清晰

比较安全(编写代码不容易出错,特别是大项目)

使用:

所有属性私有化

提供getter和setter方法访问

 

7-9 关于this关键字

在类定义的时候使用

this代表当前对象

优点:

通过this区分方法参数和成员变量

通过this方便IDE给出提示(后面eclipse演示)

 

7-10 构造方法(用来构造对象的)

什么是会被调用(new的时候)

默认构造方法(只有没有任何构造方法的时候,系统才会提供默认无参的构造方法)

格式:

修饰符 类名(参数){}

 

练习题7

  1. 创建手机类,分析一个手机类有哪些属性和行为。为属性创建getter和settter方法,并创建手机类的构造器。
  2. 定义火车、飞机这些类,为这些类提供构造器。
  3. 定义长方形类,含:

属性:宽、高(整型);

方法:求周长、面积;

构造方法3个:

无参——宽、高默认值为1;

1个参数——宽、高均为参数值;

2个参数——宽、高各为参数值。

  4.定义长方体类,定义求底面积、体积的方法。(可利用上述定义的长方形类)


第八章 类和面向对象编程 - 中级

8-1 static关键字(静态修饰符)

可以修饰成员变量和成员方法

可以通过对象和类来调用(调用的都是同一个)

修饰成员变量表示静态变量,静态变量是所有对象公用的,在内存中只占有一份内存

修饰成员方法表示静态方法,静态方法里面只能访问静态变量

 

8-2 static应用举例

圆类(π可以设置为static)

一个游戏中的游戏管理类(负责整个游戏的状态,只需要一个对象,可以全部设置为  static)

一个班级类(每个班级有一个所属的学校)

 

8-3 static占用内存图解

方法区(静态区)

 

8-4 static特点

随着类的加载而加载

优先于对象存在

所有对象共享(可以通过对象或者类来访问)

main方法就是静态方法

 

8-5 使用static的地方:工具类的创建

数组工具类ArrayTool

Arrays.fill(API中关于Arrays的其他方法)

查找在数组中的位置

字符串工具类StringTool

indexOf

自己动手实现

构造方法私有化

举例

Math

 

8-6 静态代码块

放在类里面,只会执行一次(加载类的时候,就执行这个类里面的静态代码块)

static{

}

 

8-7 继承案例

老师

姓名 年龄 性别 职称 教授科目 教授班级

吃饭 睡觉 教课

学生

姓名 年龄 性别 所在班级 班级排名

吃饭 睡觉 上课

 

8-8 怎么继承

提取公共类

子类继承公共类(子类拥有公共类所拥有的东西)

extends XXX

 

8-9 继承的特点:

Java支持单继承不支持多继承

 

8-10 继承的优点:

减少了代码量(不是很明显)

代码变得简洁

代码变得更加容易维护(后期修改)

 

8-11 继承注意事项

一、子类继承了父类里面的成员(成员变量和成员方法)

子类不能访问父类里面的私有成员

子类对象里面拥有父类里面的私有成员变量(只是不能直接访问)

  • 继承中的 “是一个”关系(人 老师 学生)
  • 子类和父类里面有同名的变量,就近原则(this super)

可以通过super访问父类里面的变量、方法和构造方法

 

8-12 继承中的构造

通过子类的构造方法构造子类对象的时候,都会调用父类里面的构造方法

(对父类里面的属性初始化,不指定就调用默认的无参构造方法)

如果父类没有无参构造方法,要通过下面的调用指定的有参构造方法

怎么指定调用父类里面的那个构造方法

super(xx,xx,xx,xx);

怎么在构造方法中调用其他构造方法

this(xx,xx,xx);

 

注意:

通过this或者super调用构造方法的时候必须在第一条语句

 

8-13 方法重写(方法覆盖)

子类中的方法名、参数和返回值和父类相同

意义:子类跟父类拥有同样的功能,但是子类有自己的特定内容和特定实现方式。可以    定义一个不同的名字方法,但是为了见名知意,保持父类名字,自己重新实现方法体。

重写注意事项

不能重写private方法

重写的时候,访问权限不能更低(最好保持权限一致)

 

8-14 重载(overload)和重写(override)

重载:

同一个类

方法名 一样 参数 不一样  返回值 不要求

重写:

子类父类

参数 返回值 方法名 都要一样

(public private)

final(最终的、最后的)

可以修饰类、方法、变量

final类

这个类不能被继承

final方法

修饰一个方法:表示这个方法不能被子类重写

final变量(之前说过)(变量分为成员变量和局部变量)

常量

  • 字面值常量 二、自定义常量

 

8-15 Java类包(package)

当我们开发的项目很大的时候,我们会写很多很多的类,这样的话不方便管理,而且容    易重名。

我们可以通过包对类进行分类管理,也可以避免重名问题。一种类型的Java类放在一 个包里面,或者一个模块的Java类放在一个包里面。不同包里面可以包含同名的类,    通过包来区分。

 

8-16 怎么定义包

package xx.xx.xx;

放在class前面

 

8-17 包名命名规则(以域名开头)

com.sikiedu.xx;

com.sikiedu.login;

com.sikiedu.register;

com.sikiedu.course;-->

com.sikiedu.courserelease 

com.sikiedu.coursecreate

-->

com.sikiedu.course.release

com.sikiedu.course.create

 

8-18 怎么划分包

可以按照功能、模块(后面具体情况具体学习)

系统举例:

java.util

java.sql

 

8-19 带包的类的编译和运行

  • 编译javac -d . xxx.java (编译的时候会根据你定义的包,创建对应的文件夹目录结构)
  • 运行java com.sikiedu.xxx

 

8-20 带包的类的使用

第一种方式:直接在类前面加上包

xxx.xx.xxx x = new xxx.xxx.xx();

第二种方式:

import xxx.xxx.xx.xx;

import xx.xx.xx.*;

 

8-21 内部类

把一个类定义在另一个类的内部,这个被定义在内部的类称为内部类。包含内部类的叫    做外部类。

内部类比外部类多了三个访问权限:

private protected static

为什么类只有public和default两个访问权限

因为类的作用域只有两个 包内和包外,public在包外也可以访问,default只能在包 内访问。

分类

非静态内部类(是否使用static修饰)

静态内部类

局部内部类

匿名内部类

非静态内部类

不能拥有静态成员

内部类可以访问外部类的私有成员,外部类不能访问内部类的成员。

如果内部类成员和外部类成员名相同的时候,可以通过 this 外部类.this来区分

如果内部类是private的那只能在外部类内部使用

如果是public的话,那可以在外部类外部使用 外部类.内部类 对象名;

 

 

8-22 非静态内部类对象和外部类对象的关系

你可以认为内部类对象是寄生在外部类对象里面的。外部类对象里面可以有多个寄生  虫,每个寄生虫都可以访问外部类对象的private数据,而且访问到的是一样的。

 

8-23 在外部类外面创建内部类:

这样对吗?

外部类.内部类 对象名 = new 外部类.内部类(); // 错误

//第一种方式

外部类.内部类 对象名 = new 外部类().new 内部类();

//第二种方式

外部类 外部类对象 = new 外部类();

内部类 对象 = 外部类对象.new 内部类();

 

8-24 局部内部类

把类定义在方法内部,作用域只在这个方法内有效。这个用法用的比较少

 

8-25 匿名内部类//JDK 8

适用于只需要使用一次的类。

通过接口或者抽象类创建匿名内部类。

 

8-26 访问权限修饰符

应用的地方:类、成员变量、成员方法

类 public default 类使用的作用域有两个 包内,包外

private成员 只能在同一个类里面访问(子类,通过对象,类外,其他包里面)

public 成员,所有地方都可以访问

 

 

练习题8

  • 定义交通工具、汽车、火车、飞机这些类,注意他们的继承关系,为这些类提供超过3个构造器。

第九章 类和面向对象编程 - 高级

9-1 继承和多态

多态:多种状态,多种形态

一个人可能是老师,可能是学生。它有两种状态。

 

9-2 为什么使用多态

主角 武器

 

父类对象可否调用子类里面的特有方法(强制类型转换)

 

多态中的对象所占有的内存

 

9-3 抽象类 abstract

抽象类里面可以包含正常方法和抽象方法

抽象类可以包含构造方法,但是不能被实例化

构造方法的作用是让子类对父类里面的数据进行初始化

抽象类的子类还可以是一个抽象类(不用实现抽象方法)

抽象类的子类(正常类)必须实现抽象类中的抽象方法

9-3-1 抽象类声明

abstract class xxx{}

 

9-3-2 抽象方法声明

Abstract void xx(); //没有方法体

 

9-3-3 抽象类练习:

* 需求:公司中程序员有姓名、工号、薪水、工作内容。

* 项目经理除了有姓名、工号、薪水、还有奖金、工作内容。

 

父类:雇员

程序员

属性 姓名 工号 薪水

行为 工作

项目经理

属性 姓名 工号 薪水 奖金

行为 工作

http://blog.csdn.net/china_demon/article/details/50525362

 

9-4 接口 interface implements

接口里面只能包含抽象方法(接口是完全抽象化的类,里面没有完整的方法)

我们可以通过接口定义一个功能(其他类可以实现这个接口来拥有这个功能)

用来扩展功能

接口可以被实现,不能被继承(接口里面只是定义了一些东西,并没有可以被实际继承       的数据或者方法(属性和行为))

接口可以被抽象类实现、也可以被具体类实现

单继承 多实现

接口与接口:可以多继承(一般不这么用)

9-4-1 接口的定义

interface xx{}

9-4-2 接口的实现

class xx implements xx{}

例子:老师和做饭功能和招生功能

 

继承和接口练习:

交通工具

飞机、汽车、轮船

附加功能:攻击

 

9-5 抽象类和接口的关系和区别

抽象类可以包含变量、常量、具体方法、抽象方法

接口可以包含 常量和抽象方法

 

接口一般用来做功能扩展

 

类、抽象类、接口练习题

教练和运动员案例

乒乓球运动员和篮球运动员。

乒乓球教练和篮球教练。

为了出国交流,跟乒乓球相关的人员都需要学习英语。

请用所学知识:分析这个案例中有哪些抽象类,哪些接口,哪些具体类。

https://www.cnblogs.com/LZL-student/p/5860918.html

 

9-6 匿名内部类//JDK 8

适用于只需要使用一次的类。

通过接口或者抽象类创建匿名内部类。


第十章 Java基础类库

  • Scanner

    • hasNextXXX nextXXX()
    • 让用户输入手机号和密码,判断是否登录成功。案例

 

  • Object类

 

  • String、StringBuffer和StringBuilder

    • String字符串的构造(一旦被赋值不能被修改)
    • StringBuffer和StringBuilder可以创建一个可以被修改的字符串
    • 使用起来基本相同
    • 不同:StringBuffer线程安全,但是性能略低。StringBuilder线程不安全但是性能略高。(什么是线程安全)
    • 字符串的存储,在内存里面JDK9之前使用char数组存储,JDK9里面使用byte数组存储。

 

  • Arrays数组类

    • sort
    • binarySearch

 

  • Math

    • PI E
    • 三角函数相关方法
    • round(x)四舍五入
    • sqrt平方根
    • pow(x,y)乘方x的y次方
    • abs(x)绝对值
    • ceil 向上取整
    • floor 向下取整
    • max(x1,x2)求最大值
    • min(x1,x2)求最小值
    • random()生成随机数 大于等于0,小于1

 

  • BigDecimal类

    • 创建
      • BigDecimal f1 = new BigDecimal(“0.05”);//首推
      • BigDecimal f2 = BigDecimal.valueOf(0.01);//次推
      • BigDecimal f3 = new BigDecimal(0.05);//不推
    • 使用
      • add
      • subtract
      • multiply
      • divide

 

  • Date、Calendar 日期和时间

    • Date d = new Date();创建一个当前时间的日期类
    • Calendar calendar = Calendar.getInstance();
      • getTime()

 

基本类型包装类

  • Byte byte
  • Short short
  • Integer int
  • BigInteger可以表示任意大小的整数
  • Long long
  • Float float
  • Double double
  • Character char
  • Boolean Boolean

 

包装类常用操作

  • 基本类型数据和字符串之间的转换
  • intValue 成员方法
  • parseInt 静态方法
  • toString 静态方法
  • valueOf(int i) 静态方法
  • valueOf(String s) 静态方法

 

自动拆箱和装箱

  • 装箱
    • Integer i = 100;
  • 拆箱
    • i+=100;

 

字符包装类Character


目前总复习就到这里结束了,谢谢大家浏览,若有错误恳请指出,谢谢。

2022 3 15 00:11