【java】非常多!学习路径24-总结目前所有知识
感谢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:
- 请写出标识符的命名规则是什么?
- 由英文字母、数字、_和$组成,长度不限。
- 标识符的第一个字符不能是数字
- 标识符区分大小写。
- 标识符不能包含空格。
- 下列属于正确标识符的选项有[多选]()
- int B. $_Count C. 3M D. Hello
- b-7 F. ms#d G. bool H. D9658
- java的基本数据类型有哪些?
- java的基本数据类型中,有几种可以表示数字?
- 写一个程序,输出你的姓名、身份证号、年龄、所在大学、专业、入学年限和学制。
第二章 运算符
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 计算机是二进制的,所有的数据使用二进制来存储。对于每个二进制来说都有原码、反码和补码。计算机存储数据的时候,使用第一位表示数字的正负,0代表正数,1代表负数。计算机存储正数的时候直接存储正数的原码,存储负数的时候存储负数的补码。(为什么存储补码,而不是原码,这个是为了方便进行数学运算,具体不解释了) 正数:原码、反码和补码相同。 负数: 原码(符号位为1) 反码(符号位不变,其余位数取反) 补码(反码+1) 只针对二进制来说的,所以在进行运算之前会转换成二进制,再运算。 & 按位与:对应位都是1才是1 | 按位或:对应位有一个1,就是1 ~ 按位取反:1变0,0变1 ^ 按位异或:对应位不一样才是1 << 左移(高位抛弃,低位补0) >> 右移(高位按照符号位补齐,低位抛弃) >>>无符号右移(忽略符号位,高位补0,低位抛弃) ?: 规则: 布尔表达式?表达式1:表达式2 如果布尔表达式的结果为true,返回表达式1的结果 如果布尔表达式的结果为false,返回表达式2的结果 案例: 取最大值(两个整数和三个整数) 默认优先级 通过()控制优先级 小类型到大类型会自动转换:byte->short,char->int->long->float->double 虽然float比long小,但是因为存储方法不一样导致float里面可以存储的数据 范围比 long要大(浮点型来说,有一部分是用来表示有效位数的,有一部分是 用来表示多少次方。) 使用情况: 把一个大类型赋值给小类型,需要进行前置类型转换 int i = (int)3.3; long j = (long)3.4f; int c = ‘a’;//隐式转换 一、对于以下,有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 以{开始,以}结束 {} 注释事项 控制程序中语句执行的流程(顺序)。默认是从上到下一条语句一条语句执行。 意义:通过条件判断是否执行某些语句 if(布尔表达式){ //语句,当布尔表达式为true的时候才会执行的语句 } if(){ //语句 }else{ //语句 } if(){ }else if(){ }else{ } if() Xxx; Xxx; if(); 三元运算符可以实现的都可以使用if语句代替 区别: 三元运算符比较简洁 三元运算符必须返回结果 if语句可以执行多条语句 结构: switch(表达式){ case 值1: 语句块1; break; case 值2: 语句块2; break; ... default: Default语句块; break; } 表达式可以是整数 字符 枚举 字符串 case后面的值必须是常量 break用来中断switch语句 完成:创建10个敌人 完成:取得1-100的所有数的和 完成:输出1-10 完成:输出10-1 while(布尔表达式){ //循环体 } do ... while循环 do{ //循环体 }while(布尔表达式); for(初始化语句;判断条件语句;更新语句){ //循环体 } 注意: For初始化语句里面定义的变量只能在for循环里面使用 for循环的特殊使用方式 语句的嵌套 输出1-100内的所有偶数 循环练习: 3,一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13 米)? 使用在循环语句中 return 用来结束方法 如何接收用户键盘输入的数据 import java.util.Scanner; Scanner s = new Scanner(System.in); s.nextInt(); 一、接收用户输入的一个整数,判断它是奇数还是偶数。 二、使用循环语句计算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的三次 方。 十一、猜数字,随机生成一个数字,让用户猜大小,然后提示猜大了或者猜小了,猜不中让 用户一直猜,直到用户猜中,游戏结束,就不需要继续猜了。 字符串是比较重要的内容 因为本章会学习到很多API,学习比较容易理解,也会使用,就是比较容易忘, 忘了没有关系,跟着老师做一遍练习,心中有印象,后面使用的时候再回头查阅即可 在使用中慢慢掌握 需要使用””双引号引起来 “234” “sdfsdf” “中国” 一个字符串不能放在多行,那怎么表示换行呢 String str=”sdfsdf”; String str=new String(”sdfsdf”); 多个字符串连接 和其他数据连接 通过+可以直接对字符串(或者其他数据类型)常量和变量做连接操作 字符串无法被修改 解释(引用类型,基本类型) 内存区域:栈 堆 方法区 运行常量区 字符串值无法被修改,但是字符串对象可以引用别的字符串。 s.length(); s.indexOf(int c); s.indexOf(String str); s.lastIndexOf(String str); s.charAt(int index) s.substring(int beginIndex); s.substring(int beginIndex,int endIndex); s.startsWith(String prefix); s.endsWith(String suffix); == s.equals(String str); s.equalsIgnoreCase(String str); s.compareTo(String str);//compareTo比较的不是字符串是否相等,这里比较的 是字符串的大小,字符串的大小怎么怎么比较呢,按个字符比较相同的字符跳过, 遇到不同的字符,返回字符的差。如果两个字符串,前面几个字符相等,长度不相 等(“siki” “sikiedu”)返回两个字符串的长度差。 s.contains(String str); s.isEmpty(); 空的两种状态 String s = “”;//空字符串 String s = null;//空对象 s.toLowerCase(); s.toUpperCase(); s.split(String str); s.split(String str,int limit); s.trim(); s.replace(char oldChar,char newChar); s.replace(String oldStr,String newStr); 日期和时间的格式化 假如我们要做一个成绩管理系统,一个班级里面有50个人。 假如我们做的是一个公司的财务管理软件,需要记录每个人的工资,公司有30到1000 个员工。 使用数组可以搞定上面的: 数组可以存储多个类型一致的元素。(任意类型) 基本类型变量声明出来不管是否赋值,都已经分配了内存。 引用类型变量的创建分为两步:声明和初始化 声明只在栈内分配内存(存储引用,或者说存储内存地址) 初始化在堆或者方法区分配内存(存储实际的数据) new出来的东西放在堆里面 程序运行常量放在方法区里面 所有局部变量都存放在栈里面。 在方法里面创建的变量都是局部变量,因为只在这个方法内有效。 声明第一种方式:数组元素类型[] 数组名; 声明第二种方式:数组元素类型 数组名[]; 注意:没有初始化的数组是无法使用的。(可以初始化为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(数组名,值);//使用指定的值填充指定的数组 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} 七、数据查找,有一个数组,里面存储是是整数,从这个里面查找一个指定整数,找到 这个整数所在位置(索引位置)。(查找第一个出现的位置) 假如我们要做一个成绩管理系统,一个班级里面有50个人。 假如我们做的是一个公司的财务管理软件,需要记录每个人的工资,公司有40个员工。 对上面的问题进行升级 假如我们要做一个成绩管理系统,我们有10个班级,一个班级里面有50个人。 假如我们做的是一个公司的财务管理软件,需要记录每个人的工资,公司有6个部门, 每个部门有40个员工。 声明第一种方式:数据类型[][] 数组名; 声明第二种方式:数据类型 数组名[][]; 初始化第一种方式:数组名=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、冒泡排序 2、直接选择排序 意思是交个女朋友,面对女朋友编程吗? 很多程序中的概念,实际的意思跟它表面的意思会有一些不一样。 假如我们要开发一个坦克大战的游戏 我们这个游戏有一些属性 当前剩余多少条命(没命的话,游戏结束,开始有3条命) 当前游戏的分数(每次杀死敌人得分) Boss是否死亡(死亡重新开始游戏,损失一条命) 我们有一个主角(坦克)它有一些属性 等级(等级越高,攻击力越强,初始1级) 当前血量 我们有一些种类的敌人 普通敌人,铜敌人,黄金敌人 不同敌人的攻击力和血量不一样 敌人可以自己移动 交互 可以控制主角移动 可以发射子弹攻击敌人 敌人会自动追踪主角,并进行攻击 在我们写的程序有很多的代码的时候,我们可以把程序中的东西进行分类,跟主角相关的是一类,跟敌人相关的是一类,跟整个游戏相关的是一类。 通过分类可以让程序变得更加有结构。在程序中可以使用类(class)对代码进行分类,当使用类编程的时候,使用创建出来的变量称之为一个对象。这就是传说中的面向对象编程。 面向对象和面向过程的区别。面向过程里面没有对象,强调的开发一个功能的步骤和过程,一步一步类,面向对象我们操作处理的是一个个的对象,(详细的每个功能的步骤和过程都封装在了类里面,通过类分类划分模块)程序更加结构化。(更加适合开发大型项目,更加便于后期的维护) 如何通俗易懂地举例说明“面向对象”和“面向过程”有什么区别? https://www.zhihu.com/question/27468564 封装、继承、多态(后面慢慢理解) 一个类表示一个类别(比如上面的例子,有主角 敌人 游戏管理系统) 通过一个类管理这个类别的所有相关的东西。比如敌人,主角 我们可以定义一个人主角类,来控制主角相关的属性和行为(方法)的管理。 这里所说的属性和行为,在我们程序中叫做成员变量、成员方法。 class 类名{ //成员变量(这个类有的属性) //成员方法(这个类有哪些行为,有哪些功能) } 怎么声明对象 类名 对象名; 定义好了类,为什么要利用类定义变量(对象)? 一个类相当于一个模板,利用模板可以生产实例。 类相当于车工厂里面的车模(模具),利用车模可以生成可以实际使用的很多辆车。 类==车模 对象==车 (敌人类 和 很多个敌人) 分析下主角类有哪些属性和行为? 如何利用类创建对象? 使用属性、调用行为 大象装进冰箱问题 分析有哪些类 大象类,冰箱类 对象之间的赋值(引用的赋值) 定义的位置 什么时候占用内存 所占用内存的位置 什么时候所占内存被销毁 初始值 当把一个对象当做一个方法的参数的时候 因为类是引用类型,所以在方法内修改引用类型里面的数据的时候,原引用类型里面的 数据也被修改了! 如果这个对象只使用一次的时候 Java中的垃圾回收机制GC(JVM) 如果我们要开发一个教务管理系统。这个教务管理系统是给学校使用的,用来管理学生和老师的,比如学生的成绩信息管理,老师所有信息管理...等。 学生类创建 老师类创建 对象是如何在内存中存储的 (项目开发中,我们开发的类不止给我们自己使用也给团队中的其他人使用) 可以修饰成员变量,可以修饰成员方法 把不需要外界访问的属性都隐藏起来 提供方法让外界访问 优点: 让代码结构更加清晰 比较安全(编写代码不容易出错,特别是大项目) 使用: 所有属性私有化 提供getter和setter方法访问 在类定义的时候使用 this代表当前对象 优点: 通过this区分方法参数和成员变量 通过this方便IDE给出提示(后面eclipse演示) 什么是会被调用(new的时候) 默认构造方法(只有没有任何构造方法的时候,系统才会提供默认无参的构造方法) 格式: 修饰符 类名(参数){} 属性:宽、高(整型); 方法:求周长、面积; 构造方法3个: 无参——宽、高默认值为1; 1个参数——宽、高均为参数值; 2个参数——宽、高各为参数值。 4.定义长方体类,定义求底面积、体积的方法。(可利用上述定义的长方形类) 可以修饰成员变量和成员方法 可以通过对象和类来调用(调用的都是同一个) 修饰成员变量表示静态变量,静态变量是所有对象公用的,在内存中只占有一份内存 修饰成员方法表示静态方法,静态方法里面只能访问静态变量 圆类(π可以设置为static) 一个游戏中的游戏管理类(负责整个游戏的状态,只需要一个对象,可以全部设置为 static) 一个班级类(每个班级有一个所属的学校) 方法区(静态区) 随着类的加载而加载 优先于对象存在 所有对象共享(可以通过对象或者类来访问) main方法就是静态方法 数组工具类ArrayTool Arrays.fill(API中关于Arrays的其他方法) 查找在数组中的位置 字符串工具类StringTool indexOf 自己动手实现 构造方法私有化 举例 Math 放在类里面,只会执行一次(加载类的时候,就执行这个类里面的静态代码块) static{ } 老师 姓名 年龄 性别 职称 教授科目 教授班级 吃饭 睡觉 教课 学生 姓名 年龄 性别 所在班级 班级排名 吃饭 睡觉 上课 提取公共类 子类继承公共类(子类拥有公共类所拥有的东西) extends XXX Java支持单继承不支持多继承 减少了代码量(不是很明显) 代码变得简洁 代码变得更加容易维护(后期修改) 一、子类继承了父类里面的成员(成员变量和成员方法) 子类不能访问父类里面的私有成员 子类对象里面拥有父类里面的私有成员变量(只是不能直接访问) 可以通过super访问父类里面的变量、方法和构造方法 通过子类的构造方法构造子类对象的时候,都会调用父类里面的构造方法 (对父类里面的属性初始化,不指定就调用默认的无参构造方法) 如果父类没有无参构造方法,要通过下面的调用指定的有参构造方法 怎么指定调用父类里面的那个构造方法 super(xx,xx,xx,xx); 怎么在构造方法中调用其他构造方法 this(xx,xx,xx); 注意: 通过this或者super调用构造方法的时候必须在第一条语句 子类中的方法名、参数和返回值和父类相同 意义:子类跟父类拥有同样的功能,但是子类有自己的特定内容和特定实现方式。可以 定义一个不同的名字方法,但是为了见名知意,保持父类名字,自己重新实现方法体。 重写注意事项 不能重写private方法 重写的时候,访问权限不能更低(最好保持权限一致) 重载: 同一个类 方法名 一样 参数 不一样 返回值 不要求 重写: 子类父类 参数 返回值 方法名 都要一样 (public private) final(最终的、最后的) 可以修饰类、方法、变量 final类 这个类不能被继承 final方法 修饰一个方法:表示这个方法不能被子类重写 final变量(之前说过)(变量分为成员变量和局部变量) 常量 当我们开发的项目很大的时候,我们会写很多很多的类,这样的话不方便管理,而且容 易重名。 我们可以通过包对类进行分类管理,也可以避免重名问题。一种类型的Java类放在一 个包里面,或者一个模块的Java类放在一个包里面。不同包里面可以包含同名的类, 通过包来区分。 package xx.xx.xx; 放在class前面 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 可以按照功能、模块(后面具体情况具体学习) 系统举例: java.util java.sql 第一种方式:直接在类前面加上包 xxx.xx.xxx x = new xxx.xxx.xx(); 第二种方式: import xxx.xxx.xx.xx; import xx.xx.xx.*; 把一个类定义在另一个类的内部,这个被定义在内部的类称为内部类。包含内部类的叫 做外部类。 内部类比外部类多了三个访问权限: private protected static 为什么类只有public和default两个访问权限 因为类的作用域只有两个 包内和包外,public在包外也可以访问,default只能在包 内访问。 分类 非静态内部类(是否使用static修饰) 静态内部类 局部内部类 匿名内部类 非静态内部类 不能拥有静态成员 内部类可以访问外部类的私有成员,外部类不能访问内部类的成员。 如果内部类成员和外部类成员名相同的时候,可以通过 this 外部类.this来区分 如果内部类是private的那只能在外部类内部使用 如果是public的话,那可以在外部类外部使用 外部类.内部类 对象名; 你可以认为内部类对象是寄生在外部类对象里面的。外部类对象里面可以有多个寄生 虫,每个寄生虫都可以访问外部类对象的private数据,而且访问到的是一样的。 这样对吗? 外部类.内部类 对象名 = new 外部类.内部类(); // 错误 //第一种方式 外部类.内部类 对象名 = new 外部类().new 内部类(); //第二种方式 外部类 外部类对象 = new 外部类(); 内部类 对象 = 外部类对象.new 内部类(); 把类定义在方法内部,作用域只在这个方法内有效。这个用法用的比较少 适用于只需要使用一次的类。 通过接口或者抽象类创建匿名内部类。 应用的地方:类、成员变量、成员方法 类 public default 类使用的作用域有两个 包内,包外 private成员 只能在同一个类里面访问(子类,通过对象,类外,其他包里面) public 成员,所有地方都可以访问 多态:多种状态,多种形态 一个人可能是老师,可能是学生。它有两种状态。 主角 武器 父类对象可否调用子类里面的特有方法(强制类型转换) 多态中的对象所占有的内存 抽象类里面可以包含正常方法和抽象方法 抽象类可以包含构造方法,但是不能被实例化 构造方法的作用是让子类对父类里面的数据进行初始化 抽象类的子类还可以是一个抽象类(不用实现抽象方法) 抽象类的子类(正常类)必须实现抽象类中的抽象方法 abstract class xxx{} Abstract void xx(); //没有方法体 * 需求:公司中程序员有姓名、工号、薪水、工作内容。 * 项目经理除了有姓名、工号、薪水、还有奖金、工作内容。 父类:雇员 程序员 属性 姓名 工号 薪水 行为 工作 项目经理 属性 姓名 工号 薪水 奖金 行为 工作 http://blog.csdn.net/china_demon/article/details/50525362 接口里面只能包含抽象方法(接口是完全抽象化的类,里面没有完整的方法) 我们可以通过接口定义一个功能(其他类可以实现这个接口来拥有这个功能) 用来扩展功能 接口可以被实现,不能被继承(接口里面只是定义了一些东西,并没有可以被实际继承 的数据或者方法(属性和行为)) 接口可以被抽象类实现、也可以被具体类实现 单继承 多实现 接口与接口:可以多继承(一般不这么用) interface xx{} class xx implements xx{} 例子:老师和做饭功能和招生功能 继承和接口练习: 交通工具 飞机、汽车、轮船 附加功能:攻击 抽象类可以包含变量、常量、具体方法、抽象方法 接口可以包含 常量和抽象方法 接口一般用来做功能扩展 类、抽象类、接口练习题 教练和运动员案例 乒乓球运动员和篮球运动员。 乒乓球教练和篮球教练。 为了出国交流,跟乒乓球相关的人员都需要学习英语。 请用所学知识:分析这个案例中有哪些抽象类,哪些接口,哪些具体类。 适用于只需要使用一次的类。 通过接口或者抽象类创建匿名内部类。 目前总复习就到这里结束了,谢谢大家浏览,若有错误恳请指出,谢谢。2-2-6 位运算符
2-2-7 三元运算符
2-3 运算符优先级
2-4 数据类型转换
2-4-1隐式类型转换
2-4-2 显式类型转换(也叫做强制类型转换)
练习题2
第三章 流程控制
3-1 语句块
3-2 流程控制
3-3 条件语句
3-3-1 if条件
3-3-1-1 第一种
3-3-1-2 第二种
3-3-1-3 第三种
3-3-1-4 特殊的用法:
3-3-1-5 注意事项
3-3-2 switch分支语句
3-4 循环语句
3-4-1 while循环
4-3-2 for循环
3-5 流程控制
3-5-1 break语句(中断语句)
3-5-2 continue语句(中断当前循环,继续下次循环)
练习题3
第四章 字符串String
4-1 本章学习方法
4-2 怎么表示字符串
4-2-1 字符串常量
4-2-2 字符串变量
4-3 连接字符串(+)
4-4 字符串的特性
4-5 字符串信息获取
4-5-1 长度
4-5-2 查找子字符串的位置
4-5-3 获取指定位置的字符
4-5-4 获取子字符串
4-6 字符串判断:
4-6-1 判断字符串的开始和结尾
4-6-2 判断字符串是否相等
4-6-3 判断是否包含某个子字符串
4-6-4 判断字符串是否为空
4-7 字符串转换操作
4-7-1 字母大小写转换
4-7-2 字符串分割
4-7-3 去除空格(前面和后面的空格,不包括中间的空格)
4-7-4 字符串替换
4-7-5 字符串格式化
练习题4
第五章 一维数组
5-1 数组是用来干嘛的?
5-2 引用类型和基本类型变量创建的不同
5-3 关于栈
5-4 什么是局部变量?
5-5 一维数组的声明、初始化和使用
第一步:声明
第二步:初始化
第三步:使用
注意事项
编程练习5
第六章 二维数组
6-1 二维数组的声明、初始化和使用
为什么用二维数组?
声明
初始化
使用
6-2 数组排序
编程练习6
第七章 类和面向对象编程-初级
7-1 什么是面向对象编程?
7-2 面向对象(类、对象)的三个特征:
7-3 怎么定义类?
7-4 成员变量和局部变量
7-5 什么是匿名对象?
7-6 开发教务管理系统
7-7 访问修饰符 private
7-8 封装:
7-9 关于this关键字
7-10 构造方法(用来构造对象的)
练习题7
第八章 类和面向对象编程 - 中级
8-1 static关键字(静态修饰符)
8-2 static应用举例
8-3 static占用内存图解
8-4 static特点
8-5 使用static的地方:工具类的创建
8-6 静态代码块
8-7 继承案例
8-8 怎么继承
8-9 继承的特点:
8-10 继承的优点:
8-11 继承注意事项
8-12 继承中的构造
8-13 方法重写(方法覆盖)
8-14 重载(overload)和重写(override)
8-15 Java类包(package)
8-16 怎么定义包
8-17 包名命名规则(以域名开头)
8-18 怎么划分包
8-19 带包的类的编译和运行
8-20 带包的类的使用
8-21 内部类
8-22 非静态内部类对象和外部类对象的关系
8-23 在外部类外面创建内部类:
8-24 局部内部类
8-25 匿名内部类//JDK 8
8-26 访问权限修饰符
练习题8
第九章 类和面向对象编程 - 高级
9-1 继承和多态
9-2 为什么使用多态
9-3 抽象类 abstract
9-3-1 抽象类声明
9-3-2 抽象方法声明
9-3-3 抽象类练习:
9-4 接口 interface implements
9-4-1 接口的定义
9-4-2 接口的实现
9-5 抽象类和接口的关系和区别
9-6 匿名内部类//JDK 8
第十章 Java基础类库
Scanner
Object类
String、StringBuffer和StringBuilder
Arrays数组类
Math
BigDecimal类
Date、Calendar 日期和时间
基本类型包装类
包装类常用操作
自动拆箱和装箱
字符包装类Character
2022 3 15 00:11