A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

yj17816110027

初级黑马

  • 黑马币:16

  • 帖子:5

  • 精华:0

© yj17816110027 初级黑马   /  2019-8-20 19:17  /  784 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.        JAVA跨平台,JVM(java虚拟机)不跨平台。JVM与JRE的关系和核心类库。
2.        JRE是java运行环境,JDK是Java开发工具包,包括JRE和开发工具。

3.        Doc常用的一些命令:

4.        Java程序开发的流程:编写程序 编译程序 运行程序

5.        空常量不能直接输出。
6.        常量分类:字符串常量 整数常量 小数常量 字符常量 布尔常量 空常量

7.        数据类型
a. 计算机存储设备的最小信息单元是“位(bit)”,通常最小字母b表示,而计算机中最小的存储单元是”字节(byte)”,通常用大写字母B表示,一个字节由八个位组成。
b. 数据类型

c. 数据类型内存占用和取值范围

整数默认为int类型,浮点数默认为double类型
8.        变量的定义格式:
数据类型 变量名 = 初始化;
也可以是先声明后赋值:
数据类型 变量名;
变量名 = 初始化值;
9.        变量使用时注意事项
a.        定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整数太大可能超出int范围。
b.        定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数默认是double类型,double的取值范围是大于float的,类型不兼容。
10.        标识符
a.        标识符是用户编程时使用的名字,用于给类,方法,变量,常量等命名。
b.        Java中标识符的组成规则:
①由字母,数字,下划线“_”,美元符号“$”组成,第一个字符不能是数字。
②不能使用java中的关键字作为标识符
③标识符对大小写敏感(区分大小写)。
c.        Java中标识符的命名约定:
①小驼峰式命名:变量名,方法名
首字母小写,从第二个单词开始每个单词的首字母大写。
②大驼峰式命名:类名
每个单词的首字母都大写。
11.        类型转换
a.        自动类型转换:
把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。
b.        强制类型转换:
把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。
格式:目标数据类型 变量名 = (目标数据类型)值或者变量;

1.        算术运算符
a.        Java程序中,整数运算,结果只能得到整数,想得到小数,需要浮点数参与运算。
b.        整数的除法运算得到的是商。
c.        整数的取余运算得到的是余数。
2.        字符的+操作
a.        char类型的数据参与算术运算,会自动提升为int类型,使用的是字符在计算机底层中对应的十进制整数值。
b.        不同的基本数据类型参与运算时,整个算术表达式的类型会自动进行提升,提升为参与运算的最高等级。
提升规则:
byte类型 short类型和char类型将被提升到int类型。
整个表达式的类型自动提升到表达式中最高等级操作数相同的类型。
类型
等级顺序:byte,short,char到int到long到float到double
3.        字符串的+操作
a.        当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算。
b.        在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算,当连续进行“+”操作时,从左到右逐个进行。
4.        赋值运算符
a.        最基本的赋值运算符是“=”,表示将右边表达式的值赋值给左边的变量。
b.        扩展的赋值运算符+=,-=,*=,/=,%=都表示先将左边与右边做相应的运算,再赋值给左边。
注意:扩展的赋值运算符包含了强制类型转换。
5.        自增自减运算符
a.        自增(或自减)运算符作用是在运算结束前(前置自增自减运算符)或后(后自增自减运算符)将变量的值加(或减)一。
b.        单独使用,前置和后置没有区别,结果一样。
c.        参与运算:
前置:运算使用的是自增或自减后的值,(先增后用)。
后置:运算使用的是自增或自减的值,(先用后增)。
d.        常用用法:单独使用。
6.        关系运算符
a.        关系运算符的运算结果都是boolean类型,要么是true,要么是false。
b.        注意不要把“==”误写为“=”,“==”是关系运算符(等于),“=”是赋值运算。

7.        逻辑运算符
a.        逻辑运算符把各个运算的表达式连接起来,组成一个逻辑表达式,以判断程序中的表达式是否成立。
b.        逻辑运算的结果肯定是boolean类型,要么是true要么是false。

c.        短路逻辑运算符
①&& 逻辑与 运算结果与&相同,但具有短路效果。
一旦发现左边的表达式结果为false,右边的表达式将不参与运算。
②|| 逻辑或 运算结果与相同,但具有短路效果。
一旦发现左边的表达式结果为true,右边的表达式将不再参与运算。
③在我们的代码书写中,逻辑与和或的运算,实际使用的就是短路的逻辑运算符。
8.        三元运算符
a.        三元运算符语法格式:
关系表达式 ? 表达式1 : 表达式2;
b.        说明:问号前面的位置是判断的条件,判断结果为boolean型,为true时调用表达式1,为false时调用表达式2。
9.        数据输入
a.        Scanner使用的基本步骤
①导包。Scanner类在java.util包下。
Import java.util.Scanner;
②创建键盘录入对象。
Scanner sc = new Scanner(System.in);
③接收键盘录入数据。
int i = sc.nextInt();
10.        顺序结构
a.        流程控制语句分类:
1.        顺序结构
2.        分支结构(if, while)
3.        循环结构(for, while, do...while)
11.        if结构
if语句格式
if(关系表达式)  {
                语句体
}

12.        if...else结构
if(关系表达式) {
                语句体1;
} else {
                语句体2;
}

13.        if...else...if结构
if...else...if语句格式
if(关系表达式) {
                语句体1;
} else if (关系表达式2) {
                语句体2;
}

else {
                语句体n+1;
}

1.        switch结构
switch的基本组成格式
switch(表达式) {
                case 值1:
                        语句体1;
                        break;
                …
                default:
                        语句体n+1;
                        break;
}
a.        switch中break的作用
用于结束整个switch语句的执行。
b.        switch中default的执行时机
当表达式的值,和case给出的值,都没有匹配成功,将会执行default。
c.        switch括号中的表达式可以接收的类型
byte,short,int,char,jdk5开始可以接收枚举,jdk7开始可以接收String。

2.        switch中case穿透
switch中省略了break的现象
如果switch匹配到了对应的case,但是当前case中没有遇到break,这时候代码会不再进行其他的case匹配,继续向下执行,一直到switch所有语句执行完毕,或者中途遇到了break,才会结束,这种现象,我们称之为case穿透。
案例:

3.        for结构
a.        for(初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
初始化语句:对控制循环的变量进行初始化
条件判断语句:控制循环体是否要执行的判断条件
循环体语句:循环中要做的事情
条件控制语句:对控制循环的变量进行改变,也就是控制循环的进度
b.        for语句的执行流程
①执行初始化语句,该语句只会执行一次
②执行条件判断语句,例如i <= 5,看其返回结果是true还是false,如果为false,结束循环,如果为true,则执行循环体语句
③当条件为true的时候,执行循环体语句
④执行条件控制语句,改变控制循环的变量,例如i++;随后继续执行条件判断语句,以此类推
  
4.        for循环打印水仙花数

a)        水仙花数,指的是一个三位数,个位,十位,百位的数字立方和等于原数,例如153,3*3*3 + 5*5*5 + 1*1*1 = 153
b)        获取一个三位数的个位,十位,百位?
将循环中获取到的每一个数值,使用num变量记录
Num % 10得到个位
Num / 10 % 10得到十位
Num / 10 / 10 % 10得到百位
5.        while循环的完整格式
初始化语句;
while(条件判断语句) {
                循环体语句;
                条件控制语句;
}
while循环的执行流程
①执行初始化语句(程序从上到下执行,也必须先执行这一句)
②执行条件判断语句,看其结果是true还是false,false的话结束循环,true的话则继续执行
③循环条件满足,执行循环体语句
④执行条件控制语句
⑤继续执行条件判断语句,看其返回结果是true,还是false…以此类推


6.        do...while循环的完整格式
初始化语句
do {
                循环体语句;
                条件控制语句;
} while(条件判断语句);
a.        对比while循环,思考do...while循环的特点是
按照顺序,程序从上到下依次执行,do...while循环会先执行循环体语句,随后再执行条件判断语句,由此得出结论,do...while循环,无论条件是否满足,都至少执行一次循环体。

7.        三种循环的区别
a.        for循环和while循环,是先判断后执行
b.        do...while循环是先执行后判断
c.        for循环和while循环的区别
for循环内部定义的变量,在循环之后就会从内存中释放掉,再想使用就找不到了,而while控制循环的变量是定义在循环外部,循环结束后可以继续使用。(也可以将for循环的初始化语句定义在循环外部)
d.        死循环的三种书写格式是?哪一种最常用?
格式:for(;;){} while(true){} do{}while(true);
常用:while(true){}
8.        跳转控制语句 break continue
a.        break终止此=整个循环
break可用于switch语句中,也可以用于循环语句,三种循环都可以
b.        continue跳出当前循环,执行下一次循环。
Continue只能应用在循环中!
9.        循环嵌套
循环嵌套的执行步骤
外循环执行一次,内循环执行一圈
简单理解:整个内循环,就是外循环所控制的循环体,循环体没有执行完,是不会开始下一次循环的。
10.        Random
①Random的使用步骤为:
A.        导入包 import java.util.Random;
B.        创建对象 Random r = new Random();
C.        获取随机数 r.nextInt(10); //10是举例,不是固定写法
②如果nextInt方法中传入的是20,则产生的随机数是多少?
产生的是0~19,如果想要产生1~20的随机数,需要手动修改
int num = r.nextInt(20) + 1;

1.        数组定义格式
a.        第一种:数据类型[] 数组名
示例:int[] arr    double arr[]      char[] arr
b.        第二种:数据类型 数组名[]
示例:int arr[]    double arr[]      char arr[]
2.        数组动态初始化
a.        数组的动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
示例:int[] arr = new int[5];
b.        数组动态初始化格式的每个内容代表含义详解
等号左边:
int: 数组的数据类型
[]: 代表这是一个数组
arr: 代表数组的名称
等号右边:
new: 为数组开辟内存空间
int: 数组的数据类型
[]: 代表这是一个数组
5: 代表数组的长度
3.        数组元素访问
a.        访问数组元素的格式是 数组名[索引];
b.        索引是给每个元素起一个编号,通过编号可以获取指定元素
c.        从0开始编号,最大取到数组长度-1
4.        内存分配
a.        Java中常见的内存分配有以下两种
栈内存:存储局部变量的,使用后立即消失
堆内存:存储的是new出来的内容,使用后变成垃圾
b.        数组的默认初始化值
整数类型:0
浮点类型:0.0
字符类型:空字符
布尔类型:false
引用类型:null


5.        多个数组指向相同内存图
a.        引用数据类型在赋值时:是将内存地址值进行了赋值。
b.        多个数组引用同一个内存空间时:
任何一个数组对象对元素进行修改,都会影响到其他数组对象

6.        数组静态初始化
a.        数组静态初始化格式
完整版格式:数据类型[] 数组名 = new 数据类型[]{元素...}
简化版格式:数据类型[] 数组名 = {元素...}
b.        数组的两种初始化格式的区别
动态初始化:只给定数组长度,由系统分配默认初始化值。
静态初始化:创建数组时,直接将元素确定。
7.        数组操作的两个常见小问题
a.        数组索引越界异常
出现原因:访问了不存在的数组索引
解决方案:改成正确的索引范围即可
b.        数组空指针异常
出现原因:数组引用为null时,再去操作数组
解决方案:给数组一个真正的堆内存空间引用即可
8.        数组的遍历
a.        获取数组长度
数组名.length
b.        遍历数组的注意事项
注意循环次数是否在索引范围内,否则会发生索引越界
9.        获取数组最值
案例:

1.        方法概述
方法:是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。
方法的两个注意
        A:方法必须创建才可以使用,该过程称之为(方法定义)。
        B:方法创建后不能直接运行,需要手动调用,才可以执行,该过程称之为(方法调用)。
2.        方法定义和调用
a.        方法的定义格式
Public static void 方法名() {
                方法体; //方法所包裹的逻辑代码
}
b.        方法的调用格式
在main方法中,通过方法名调用
方法名()
3.        带参数方法定义和调用
a.        带参方法的定义格式
Public static void 方法名(参数1, 参数2, 参数...) {
                方法体;
}
                参数的定义:数据类型 变量名, 数据类型 变量名...
                注意:方法的参数,可以是一个,也可以是多个,如果是多个,中间需要以逗号分隔
b.        带参方法的调用格式
在main方法中,通过方法名调用,并传入对应类型的参数
方法名(参数)
c.        调用带参方法,有哪些注意事项
调用带参方法,传入的参数,无论是类型还是数量,都需要跟定义的参数类型匹配
传入的参数可以是变量,也可以是常量
4.        形参和实参
a.        形参
全程叫做形式参数,指的是定义方法的时候,方法小括号中定义的参数
例如:public static void method(int num) {}
b.        实参
全程为实际参数,指的是调用方法的时候,传入的具体数值
例如:method(10)
5.        带返回值方法定义和调用
a.        public static 返回值类型 方法名(形参列表) {
方法体;
return 返回值;
}
b.        方法的返回值类型,和返回值的关系
对应关系,方法的返回值类型,必须跟返回值的类型对应,否则引发编译错误
c.        返回值的接收
带有返回值的方法调用之后,会产生一个运算后的结果,这个结果没有接收被使用的话,将毫无意义
d.        Return关键字的作用
return关键字用于将方法运算的结果,返还给调用处。
6.        方法的注意事项
a.        方法与方法之前是平级关系,不允许嵌套定义。
b.        如果方法的返回值类型定义为void,则代表无返回值,可以省略return语句,也可以单独书写return 语句,后面不能加数据
c.        如果方法的返回值类型明确了具体的类型,则必须要有return语句带回一个结果。
7.        方法的通用格式
public static 返回值类型 方法名(参数) {
                方法体;
                Return 返回值;
}
a.        定义方法前,要思考两个明确
①明确返回值类型:知晓方法运行结束后是否有数据返回,没有写void,有的话则书写具体类型
②明确参数:明确参数的类型和数量
b.        调用方法
①void类型的方法,直接调用即可
②非void类型的方法,推荐使用变量接收调用
8.        方法重载
方法重载:在同一类中,方法名相同,参数列表不同,与返回值无关
参数列表不同:
                                ①类型不同
                                ②个数不同
                                ③顺序不同(毫无意义)
9.        方法参数传递基本类型
对于基本数据类型的参数,形式参数的改变,不影响实际参数
原因:每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失

10.        方法参数传递引用类型
对于引用数据类型的参数,形式参数的改变,影响实际参数
原因:引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果。

1.        类是对象的抽象
对象是类的实体
类是一类具有相同属性和行为的事物集合或抽象
类是对象的数据类型
2.        若类放在了不同的模块中,需要导包,后面才能创建对象
3.        类的理解
①类是一组具有共同属性和行为的事物的抽象,简单理解,类就是对【事物】的一种【描述】。
描述事物,则需要【属性】和【行为】
属性:事物具备的各个特征,例如->手机这个事物的特征(品牌,价格...)
行为:事物能执行的操作,例如->(打电话,发短信)
②对象的理解
对象代表客观存在的事物
③类和对象的关系理解
类是对象的抽象(描述),对象是类的实体
在程序中需要现有类,才能创建出对象。
4.        单个对象内存图
a.对象在内存中的创建过程:
①在堆内存中开辟空间,产生地址值
②成员变量在堆内存中出现,并产生默认初始化值
5.        对象的内存图
①直接打印对象,打印的是对象的地址值
                System.out.println(s);        //com.itheima_03.Student@f6d7a8
               
                [I@a9d2c4
                        [        数组
                        [[        二维数组
                        I         数组中元素类型(如果是引用数据类型,前面会加一个L,然后类型是完整的类型名<包含包名和类型>)
                        9d2c4        内存中地址值(16进制的hash值)
               
                com.itheima_03.Student@f6d7a8
                        com.itheima_03.Student         完整的类型名(完整的类名<包名和类名>)
                        f6d7a8        内存中地址值(16进制的hash值)
                ②对象的引用存在栈内存中,其值是所指向对象的地址值(对象引用就是指向该对象的变量)
                对象本身,存在堆内存中,对象中成员变量的值有默认初始化值
                int 0
                String null
③main方法执行的时候首先进栈,main方法调用的其他方法,被调用的时候进栈,调用结束后就弹栈(结束)。
④多个对象的成员方法相同,但是成员变量却独立拥有。
结论:多个引用指向相同的对象,但是通过一个引用修改对象内容值,其他引用对应内容或值会同时发生改变。
6.        成员变量与局部变量的区别:

7.        Private
是一个访问权限修饰符
能修饰成员(成员变量和成员方法)
作用:保护成员不被外界直接访问。被private修饰的成员只能在本类中被直接访问
设置值:public void set变量(形式参数) {}  通过该方法设置成员变量的值
获取值:public 返回值类型 get变量()   通过该方法可以获取成员变量的值
为了安全起见,我们可以在set方法中(setter)进行判断限定
但是,一般不建议这样做:
Javabean – 实体类   实体类一般只包含基本的成员变量和变量的getter/setter,这里的setter和getter最好是标准的,没有任何修改的。
8.        编码思想:
高内聚,低耦合
一个方法只干一件事
Age   设置age—setAge(int a)      ==s.name = 10
                  获取age值—int getAge()    ==s.name
9.        实体类外获取|设置实体类成员变量的方式
第一种(成员变量的访问权限修饰符不能是private)
                        设置 s.name = 值
                        获取 s.name
                       
                第二种(成员变量被private修饰后,因为被private修饰后,外界不能直接访问该成员)
                        设置s.setName(值)
                        获取 s.getName()
                        这种方式是java推荐的,建议重点掌握
                       
                第三种(非标准类成分,只能获取不能设置)
                        show()       
                        根据自己的思路展示成员变量的值
                       
                注:在实体类内部,可以随意访问成员变量/方法,不受任何限制
10.        This关键字
this用于指代成员变量
        当方法中局部变量和成员变量不重名时,不需要使用this
        当方法中局部变量和成员变量重名时,需要在成员变量前面添加this关键字。解决的是局部变量隐藏成员变量的问题,没有该问题也可以使用this,但是没有意义。
       
        this代表的是当前对象
                谁调用当前方法,当前方法内的this只得就是谁
11.        封装
面向对象三大特征:封装 继承 多态
封装的原则:
将成员变量私有化,避免外部程序直接访问,可以通过指定的公共方法访问(getter setter)
封装的好处:
成员变量不能被直接访问,提高了代码的安全行
使用方法进行操作,提高了代码的复用性
12.        构造方法
构造方法是一个特殊的方法
        没有参数的构造方法一般称为无参构造
                public Student(){}
        有参数的构造方法一般称为有参构造
                public Student(String name, int age){
                        this.name = name;
                        this.age = age;
                }
               
        格式:
                访问权限修饰符 类名(参数 列表){}
               
                一般方法定义格式:访问权限修饰符 (其他修饰符) 返回值类型 方法名(参数列表){}
               
        功能:
                在创建对象的时候对对象进行初始化操作
               
        什么时间被调用
                在创建对象的时候被调用
13.        构造方法使用注意事项
a. 如果没有手动书写构造方法,系统会默认提供一个无参构造。
        b. 但凡是手动写了任意一个构造方法,系统将不再提供默认无参构造。
        c. 构造方法之间可以重载
        d. 系统根据提供的参数列表决定调用某一个构造方法,没有对应的构造方法则会报错
       
       
        推荐书写方式:
                不管在任何时候,先手动书写一个无参构造
14.        面试题
什么是面向对象?
                面向对象是Java里面的一个非常优秀的编程思想,区别于面向过程的思想,面向对象的思想更符合生活的思考方式。
                面向对象不只关注与解决问题是细节,更多的是关注能够解决问题的对象,以及对象的属性、行为。这种方式更贴近实际,对于维护大型项目或者复杂逻辑非常有用。
                面向对象有方便、高效的优势,比方说:父亲让儿子削苹果的例子。
                面向对象有三大特征:
                封装、继承、多态
                分开阐述三大特征
15.        怎么定位源码
按住Ctrl + 鼠标左键单击

1.        String
①String类代表什么?
代表字符串类型的对象
②String类在那个包下?
Java.lang包,使用不需导包
③String类的特点有哪些?
字符串不可改变,它的值在创建后不可更改
虽然值不可改变,但是值可以被共享使用
字符串效果上相当于字符数组,但底层原理是字节数组
2.        String的构造方法
四种:空参构造 传char[]构造 传byte[]构造 直接赋值(没有通过new创建对象)
输出字符串对象的时候,并不会输出其地址值,而是输出其内容。
每创建一次对象,都会在堆内存中开辟新的内存空间。
所以,每new一次,都是不同的对象,地址值也不一样。
通过第四种方式创建的String对象,会放在常量池中:
第一次创建某个字符串的时候,先查询常量池中是否已经有了该字符串,如果没有会创建以后放在常量池中并且把地址值给引用;后续再次创建,如果再常量池中发现需要的字符串,就不创建,直接使用(出现多个引用指向同一个对象的情况)。
String s1 = “abc”;
String s2 = “abc”;
s1 = “abcd”;
3.        字符串的比较
使用==做比较
基本类型:比较的是数据值是否相同
引用类型:比较的是地址值是否相同

4.        如果某个方法要直接被main方法调用,这个方法就需要使用static修饰
如果某个方法不被main直接调用,比如说在main方法中使用其他的对象调用,就不需要给被调用的方法用static修饰。
5.        如果对字符串进行拼接操作,每次拼接,都会创建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。我们可以通过Java提供的StringBuilder类就来解决这个问题。
6.        StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的。
7.        String和StringBuilder的区别:
String:内容是不可变的
StringBuilder:内容是可变的
8.        StringBuilder
StringBuilder常用的构造方法有哪些?
StringBuilder() 创建一个内容为空的字符串缓冲区对象
StringBuilder(String s) 根据指定字符串创建字符串缓冲区对象
StringBuilderStringBuilder     StringBuilder的有参构造
StringBuilderString           通过StringBuilder的toString()方法
9.        StringBuilder() 构造一个没有字符的字符串构造器,初始容量为16个字符。
10.        理解:
String s = new String(“abc”);
New String其实创建了两个对象,两个对象都放在堆内存中,new String创建的对象放在堆内存中,存放了s的地址和“abc“放在常量池中的地址,String s放在栈内存中,s通过地址值找到堆内存中对象的地址值,通过对象中的地址值找到字符串的内容。

1.        ArrayList
①ArrayList集合的介绍
ArrayList集合是一个长度可变的容器
②ArrayList集合的特点
ArrayList集合的长度是可变的
ArrayList集合底层是数组实现
③什么是泛型
泛型是一种广泛的数据类型,用于约束集合存储的元素数据类型
例如:
我们想存储字符串类型的数据,就可以这样写:ArrayList<String>
我们想存储学生类型的数据,就可以这样写:ArrayList<Student>
2.        ArrayList构造和添加
①ArrayList集合的构造方法是什么?
public ArrayList() 创建一个空的集合容器
②ArrayList集合的添加方法有哪些?
public Boolean add(E e)  向集合中添加元素
public void add(int index, E e) 向集合中指定索引位置添加元素
注意:索引参数要保证在集合索引长度范围之内
3.        ArrayList常用方法有哪些
public Boolean add(E e)                                                        向集合中添加元素
public void add(int index, E e)                   向集合中指定索引处添加元素
public Boolean remove(Object obj)               删除集合中指定元素
public E remove(int index)                      删除集合中指定索引处的元素
public E set(int index, E e)                       修改集合中指定索引处的元素
public E get(int index)                          获取集合中指定索引处的元素
public int size()                                获取集合的长度




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马