黑马程序员技术交流社区

标题: 技术帖 [打印本页]

作者: 汪韩    时间: 2019-9-22 16:21
标题: 技术帖

基础班总结DAY1-前言、入门程序、常量、变量
一. java语言的发展史(了解)
我们为什么学java:java他是一门计算机语言,与计算机交流的方式。开发软件。
软件的分类:应用软件(qq,微信,淘宝),系统软件:window,mac,linux.
java之父是谁:高斯林
jdk11学习用这个版本
二. java的跨平台原理
平台:不同的操作系统。
跨平台:一套代码可以在任意操作系统上运行。(一处编译,到处运行)。他需要在不同的操作系统上安装对应的jvm(java虚拟机).
jvm本身不是跨平台的,他解决的是java的跨平台。
三. jre和jdk
1.jre:java运行环境----我们运行一个java程序,只需要安装jre即可。
jre=jvm+核心类库。
2.jdk:java开发环境
jdk=jre(jvm+核心类库)+开发工具包
四. path环境变量的配置
windows提供了一个环境变量的东西,我们把我们的jdk目录配置到path中,我们就可以在任意目录下去使用这个命令。(原理:我们在dos窗口使用命令的时候,它首先会去当前的文件目录下去找有没有这个命令,如果找不到,他会依次去环境变量配置的目录去寻找)
五. 注释
给代码进行解释说明的文字,是不参与编译和运行的
// 单行注释
/* */ 多行注释
/** */ 文档注释
六. 关键字
定义:被java征用了,被java赋予特殊含义的单词或字母的组合.
一共有53个,其中有51个已经被赋予含义了,还有两个保留的关键字.
举例:public class static void true false
七. 常量
1.整数型:就是我们数学当中的整数.   1,12,36,520  可以直接输出.
2.浮点型:数学中的小数:3.14,5.20,13.14  可以直接输出
3.字符型:就是被单引号引起来的单个的字符
4.字符串:"双引号包起来的都是"
5.布尔型:只有两个true和false
6.空常量型: null 不能被输出
八. 数据类型
java是一个强类型数据语言,对待不同的数据类型,内存会分给不同的存储空间,所以我们要把不同的数据,划给不同的空间。
a.基本数据类型   b.引用数据类型(类,数组,接口)
基本数据类型分为4类8种:
[td]
数据类型
关键字
内存占用
取值范围
整数型                       
byte        1        -128 ~ 127(负的2的7次方 ~ 2的7次方-1)
short        2        -32768~32767
int        4        -2的31次方到2的31次方-1
long        8        -2的63次方到2的63次方-1
浮点型                       
float        4        负数:-3.402823E+38到-1.401298E-45                                                             正数:   1.401298E-45到3.402823E+38
double        8        负数:-1.797693E+308到-4.9000000E-324                                              正数:4.9000000E-324   到1.797693E+308
布尔型                       
boolean        1        true,false
字符型                       
char        2        0-65535
九. 变量
变量的定义:在程序的运行当中,其值在一定范围内可以发生改变的量,我们就称它为变量.
1.变量的定义格式:
a.数据类型  变量名 = 变量值;
b.数据类型  变量名;       变量名=值;
c:同时定义多个相同数据类型的变量      数据类型 变量名=数值,变量名=数值,变量名=数值.......;
2.变量的使用
变量名=值;
十. 标识符(命名规范)
1.由数字,字母,_(下划线),$组成
2.不能以数字开头
3.不能是关键字
4.区分大小写
大小驼峰命名法
十一. 类型转换
不同的数据类型存储其他的数据类型的数据.
数值型之间的类型转换
byte---> short---> int --->long --->float---> double
​                 char
隐式类型转换:从小的数据类型往大的数据类型转换
强制类型转换:从大往小的转  格式: 目标数据类型  变量名 = (目标数据类型) 数值;
DAY2-运算符、Scanner、ifDAY3-流程控制语句
一. switch
switch(表达式){
   case  常量1 :
​         语句体1;
​         break;(可以省略)
   case  常量2 :
​         语句体2;
​         break;(可以省略)
  ......
​      default  :
​      最后执行的语句;
​      break;
执行流程:表达式最终的结果一定是一个常量(byte,short,int,char,枚举,字符串).拿表达式的值与case的值从上到下一一比较,如果匹配上,开始执行匹配到的case下面的语句,直到遇到break或者switch结束,整个switch才结束.如果表达式最终的结果与所有的case都没有匹配上,就执行default的语句.
注意:case 不能重复
注意:匹配case值匹配一次,匹配到了开始执行对应case下的语句,直到遇到break或者switch结束.如果我们不加break,他会出现case穿透现象.
if和switch的区别,他们都是选择分支机构,在一些情况下,他们可以互换,但是if他的表达式是一个范围,表达式的结果是一个boolean值,而switch的表达式范围是一个常量(byte,short,int,char,枚举,字符串).我们在大部分情况下用if会多一点,if更多的选择的语句,switch类似于分支.


二. for循环
for(循环初始值;循环条件;修改循环条件){         循环体;}
格式解释:
循环初始值:循环一开始的状态
循环条件:你需要符合什么条件才能继续执行循环体
修改循环条件:每一次循环之后,应该修改我的本身需要去判断的条件的值,否则值不变,一直循环或者一直不循环.
循环体:循环执行的内容.
三. while循环
while循环完整格式:






初始化语句;while(条件判断语句){    循环体;    修改循环条件}







while循环执行流程:
1.首先应该执行初始化语句
2.执行条件判断语句,看条件判断语句的结果是true还是false
   如果是false,循环结束
  如果是true,继续向下执行
3.执行循环体
4.修改循环条件
5.回到2
四. do...while循环
完整格式:






初始化语句;do{  循环体;  修改循环条件;}while(条件判断语句);
执行流程:
1.首先执行初始化语句
2.执行循环体
3.修改循环条件
4.去判断条件是否满足条件判断语句
   如果true,回到2
   如果是false,结束循环

五. 三种循环的区别
while和for与di-while的区别,do-while不管满不满足条件,循环体肯定会执行一次.但是while和for循环体不一定会执行.
for循环和while的区别
for格式里面定义的变量,属于for,等for循环结束,变量就不能在被使用了,但是while因为变量是在while的范围之外,所以他的变量在出了while循环之后可以继续使用.
do-while基本不用.
while:使用场景:当循环未知次数的时候,
for:当循环次数已知的时候.

六. 跳转控制
continue:当在循环体里面遇到continue关键字的时候,本次(当前)循环结束,继续下次循环
break:当前整个for循环结束
七. Random
概述:
系统随机给我们产生一个随机数
使用步骤:

导包
import java.util.Random
创建对象
Random r=new Random();
3.int a=r.nextInt(整数);
解释:整数代表着我想去0-这个整数之间的随机数,包头不包尾.


DAY4-数组
一. 数组
什么是数组【理解】
数组:就是容器,可以存储多个相同 的数据.
数组定义格式【记忆】
数据类型 []  变量名;     int [] arr;
数据类型 变量名[];      int arr[];
动态初始化格式
数据类型  [] 数组名 =  new  数据类型 [长度] ;
int[]  arr =  new int[80];
什么是索引
索引,角标,下标,就是计算机给数据的编号.从0开始,不间断,连续的.        
访问数组元素格式
数据数据 a=数组名[索引];
java中的内存分配
目前我们只需要记住两个内存,分别是:栈内存和堆内存

[td]
区域名称
作用
寄存器        给CPU使用,和我们开发无关。
本地方法栈        JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区        存储可以运行的class文件。
堆内存        存储对象或者数组,new来创建的,都存储在堆内存。
方法栈        方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
静态初始化格式
完整版格式
数据类型 [] 数组名 = new 数据类型 [] {元素1,元素2......};        
简化版格式
数据类型 [] 数组名 =  {元素1,元素2......};

索引越界异常
出现原因






public class Demo6 {    public static void main(String[] args) {        int [] arr = {1,2,3,4};        //访问了不存在的索引,索引是0开始到长度-1结束        System.out.println(arr[6]);    }}
解决方案
我们写代码的时候,需要考虑我们访问的索引是不是存在的,如果索引都不存在,肯定报了数组越界异常.
ArrayIndexOutOfBoundsException;

空指针异常
出现原因






public class ArrayDemo {    public static void main(String[] args) {        int[] arr = new int[3];​        //把null赋值给数组        arr = null;        System.out.println(arr[0]);    }}







总结:NullPointerException,如果出现这个问题,我们就需要考虑我们的对象地址是不是不存在了.

数组遍历【应用】
数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。






public class Demo{    public static void main(String[] args) {        int [] arr = {1,2,3,4,5,6,7,8,9};        for (int i = 0; i < arr.length; i++) {            System.out.println(arr);        }        for (int i = arr.length-1; i >=0; i--) {            System.out.println(arr);        }    }}









总结数组
1.数组可以一次性开辟多个空间去保存相同数据类型的变量.
2.他有索引,他的索引是从0开始,到长度-1结束
3.不能整体的给数组赋值,只能给单个的数组索引对应位置辅助,格式  数组名[索引]=数值;
4.获取对应索引位置的值:数组名[索引]
5.获取数组的长度(他的元素个数):数组名.length
DAY5-方法方法的概念(理解)
​        方法是一个具有独立功能的代码集,他可以独立的运行,我们需要先编写这个方法,在需要的时候去调用即可.调用的格式就是方法名();
​        方法我们自己定义的,方法名是我们自己起的,遵循小驼峰命名法.a.方法写在类中:就是class的大括号中.b.他与main函数是并列的关系.他们没有先后.main里面不能直接写方法,自定义方法里面也不能在写方法.
  为什么要有方法:我们重复使用的具体独立的功能的代码,我们需要早在程序里编写很多次,造成代码的阅读性很差,我们想到了方法(函数),方法就把这些具体独立功能的代码封装起来,在你程序需要的时候,就可以调用,这个代码我们只需要写一次,很多可以一直的调用,调用的格式是方法名();
  作用:减少代码的复用性.
注意:

具有独立的功能.这个是你自己定的,需要你编写
需要调用才会执行


无参数方法定义和调用(掌握)
定义格式:






public static void 方法名(){     方法体;}
调用格式:






方法名();
范例:






       zuoFang();
注意:
​        方法必须先定义,后调用,否则程序将报错

带参数方法定义和调用(掌握)
定义格式:
参数:参与运算的数
参数范例:






public static void 方法名(数据类型 变量名,数据类型 变量名,....){    方法体;}
范例:






public static void isEvennumber(int a){         if(a%2==0){             System.out.println("是偶数");         }else{             System.out.println("是奇数");         }    }
注意:方法定义参数是int型的,你就传什么类型的.参数定义几个,或者是什么类型的需要你自己去定,别人调用你的时候,需要按照你参数列表中的顺序,类型都要一样的去给你.

​   
调用格式:






方法名(变量/常量);
范例:






        int b = 19;        isEvennumber(b);
方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错


形参和实参(理解)
形参:

​         我们定义一个方法的时候,首先你自己要知道你定义的方法是干什么用,此时你可以决定调用者调用你方法的时候,需要传递给你什么类型的数据,你得接收,你就在方法的参数列表(方法的小括号)位置定义变量,变量的定义格式就是数据类型,变量名,如果有多个,用逗号隔开.此时他没有实际的值,所以我们叫他形式上参与运算的值,也叫形参.
2.实参:
  调用者调用你方法的时候,他会看到你的参数列表,需要调用者提供什么数值,调用者就需要把实际的值给你去参与运算,最后得到结果,格式是方法名(变量/常量);这个数是不是实实在在存在的,我们叫他实际参与运算的数也叫实参.           
方法的注意事项(掌握)
方法不能嵌套定义
方法重载(理解)
方法重载概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
方法重载:方法的重复载入
满足一下条件就是重载:
1.在同一个类中
2.方法名相同的
3.参数列表不同(a.个数不同,b.顺序不同,c.数据类型不同)
4.与返回值无关,你就不用看返回值了

DAY7-面向对象
一个标准类的构成:
  1.私有的属性  2.属性的公共get/set方法  3.行为,自定义的方法  4.构造函数(满参,无参)
类的理解
类是现实生活中具体共同属性和行为的一种事物的抽象.
对象的理解:
他是类的实体

类和对象的关系
什么是类:他是java语言用来描述现实生活中某一类事物共性(共同的属性和行为)的总结和描述.
什么是对象:他是基于我们写的这个类在java中创建出来的真实个体(实体).在堆内存当中存在,他就是现在生活中的一个实物.
举个例子:汽车他是一类事物,我们可以写一个汽车的总结和描述,他是一个类.但是你自己的汽车就是一个对象.(万物皆对象)
封装private关键字【理解】
private是一个修饰符,可以用来修饰成员(成员变量,成员方法)
被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

public:也是一个权限修

this关键字【应用】
this:为了解决局部变量和成员变量重名的问题
就近原则:你使用的变量他表示的是离使用最近的那个定义的变量.
那么我们区分成员变量和局部变量的在一个方法里都要使用的时候,this.变量名表示的就是成员变量.
不加this表示的就是局部变量.
this:谁调用我this就表示谁.
封装思想【理解】
封装概述 是面向对象三大特征之一(封装,继承,多态) 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的
封装原则 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 成员变量private,提供对应的getXxx()/setXxx()方法
封装好处 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性

构造方法概述【理解】
构造方法是一种特殊的方法
作用:给创建的对象初始化用的
格式:public 类名(参数列表){
}
功能:完成对线的初始化,创建对象自动去调用对应的构造函数.

构造方法的注意事项【理解】
构造方法的创建:首先如果我们没有手动书写构造方法,系统默认提供一个无参构造,如果你写了一个有参构造,系统默认提供的无参构造将会失效,如果我非要再使用无参,我们必须手动书写一个无参构造.

构造方法的重载:可以重载,可以书写多个参数列表不同的构造函数

推荐的使用方式:无参+满参

重要功能!

DAY8-常用api1API概述【理解】
什么是API
​        API (Application Programming Interface) :应用程序编程接口
java中的API
​        指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。

String类概述【理解】
​        String (Java SE 9 & JDK 9 )String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
String类的特点【理解】
在java.lang包下,使用时不需要导包
一旦创建,长度和内容就不能更改,可以共享
效果上相当于字符数组,底层是字节数组.
只要被双引号引起来的内容就是字符串,也就是String类的实例(对象),就可以使用String类的方法

String类的构造方法【记忆】
常用的构造方法
[td]
方法名
说明
public   String()        创建一个空白字符串对象,不含有任何内容
public   String(char[] chs)        根据字符数组的内容,来创建字符串对象
public   String(byte[] bys)        根据字节数组的内容,来创建字符串对象
String s =   “abc”;        直接赋值的方式创建字符串对象,内容就是abc

创建字符串对象两种方式的区别【理解】
通过构造方法创建
​        通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
直接赋值方式创建
​        以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

字符串的比较【理解】==号的作用
基本数据类型:比较的值
引用数据类型:对象==时,比较的是地址值.

equals方法的作用
方法介绍






public boolean equals(String s)     比较两个字符串内容是否相同、区分大小写
帮助文档查看String常用方法【记忆】[td]
方法名
说明
public boolean   equals(Object anObject)        比较字符串的内容,严格区分大小写(用户名和密码)
public char charAt(int   index)        返回指定索引处的 char 值
public int   length()        返回此字符串的长度
StringBuilder类概述【理解】
​        内容可变的字符串,理解为一个容器.做字符串拼接的时候,可以提高效率和节省内存.
StringBuilder类和String类的区别【理解】
String类:内容是不可以改变的
StringBuilder类:内容是可以改变的,不会产生新的对象.

StringBuilder类的构造方法【记忆】
常用的构造方法
[td]
方法名
说明
public StringBuilder()        创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String   str)        根据字符串的内容,来创建可变字符串对象

帮助文档查看StringBuilder常用方法【记忆】[td]
方法名
说明
public   StringBuilder append (任意类型)        添加数据,并返回对象本身
public   StringBuilder reverse()        返回相反的字符序列
public   int   length()        返回长度,实际存储值
public   String toString()        通过toString()就可以实现把StringBuilder转换为String
StringBuilder有一个功能完全一模一样的兄弟叫StringBuffer.构造函数,调用方法,所有的功能都是一样的.可以互相替代使用.
StringBuilder他是线程不安全的,但是效率高.
StringBuffer他是线程安全,但是效率低.
DAY9-集合ArrayList类概述【理解】
什么是集合
​        什么是集合:他就是一个容器,他的底层是一个可变的数组.你也可以把他理解为可变的数组.
​        然后他可以存储不同的数据类型
ArrayList集合的特点
​          长度是可变的,内容也是可变的.
​           索引是从0开始,到长度减一结束
​           集合有顺序的
泛型的使用
​          <>:集合一开始定义的时候,功能非常强大,可以在一个集合里面存储任意的引用数据类型.但是随着社会的发展,我们发现,一个集合应该只存一个类型,会方便一点.jdk7之后想了个办法,起了个叫泛型的东西,就说,以后加泛型,语法就规定只能存泛型的类型.
!!!  增删改查

ArrayList类常用方法【应用】1.2.1构造方法[td]
方法名
说明
public ArrayList()        创建一个空的集合对象
1.2.2成员方法[td]
方法名
说明
public boolean   remove(Object o)        删除指定的元素,返回删除是否成功
public E   remove(int   index)        删除指定索引处的元素,返回被删除的元素
public E   set(int index,E   element)        修改指定索引处的元素,返回被修改的元素
public E   get(int   index)        返回指定索引处的元素
public int   size()        返回集合中的元素的个数
public boolean   add(E e)        将指定的元素追加到此集合的末尾
public void   add(int index,E   element)        在此集合中的指定位置插入指定的元素







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2