Eclipse
1:基本使用
A:创建Java项目:
点击File或者在最左侧空白处,选择Java项目,在界面中写一个项目名称,然后Finish即可。
B:创建包:展开项目,在源包src下建立一个包com.itheima
C:创建类:在com.ithiema包下建立一个类HelloWorld
在界面中写一个类名:HelloWorld,然后finish即可。
D:编写代码
在HelloWorld类写main方法,在main方法中写一条输出语句:我是黑马程序员,我骄傲,我自豪。
E:编译
自动编译,在保存的那一刻帮你做好了
F:运行
选择要运行的文件或者在要运行的文件内容中
右键 -- Run as - Java Application即可
2:基本配置
A:行号的显示和隐藏
显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。
隐藏:把上面的动作再做一次。
B:字体大小及颜色
a:Java代码区域的字体大小和颜色:
window -- Preferences --General -- Appearance -- Colors And Fonts -- Java -- Java Edit Text Font
b:控制台
window -- Preferences --General -- Appearance -- Colors And Fonts -- Debug -- Console font
c:其他文件
window -- Preferences --General -- Appearance -- Colors And Fonts -- Basic -- Text Font
C:窗体给弄乱了,怎么办?
window -- Perspective -- ResetPerspective
D:控制台找不到了,怎么办?
Window--Show View—Console
3:删除和导入项目
A:删除项目
选中项目 – 右键 – 删除
从项目区域中删除
从硬盘上删除
B:导入项目
在项目区域右键找到import
找到General,展开,并找到
Existing Projects into Workspace
点击next,然后选择你要导入的项目
注意:这里选择的是项目名称
辅助键快捷键:
内容辅助键:
alt+/
A:main方法
main,然后alt+/,回车
B:输出语句
Syso,然后alt+/,回车
快捷键:
A:注释
单行 选中内容,ctrl+/,再来一次就是取消注释
多行 选中内容,ctrl+shift+/,取消注释ctrl+shift+\
B:格式化
ctrl+shift+f
右键 -- Source -- Format
算数运算符基本方法:
运算符:就是用于对常量和变量进行操作的符号
表达式:用于算符连接起来的符合java的语法式子。不同于运算符连接的表达式是不同类型的表达式。
运算符分类:
算术运算符
赋值运算符
关系运算符
逻辑运算符
三元运算符
算数运算符:
+ ,- ,* ,/ ,% ,++ , --
% 用于获取两个数据相除时候的余数
/ 用于获取两个数据相处时候的商
字符和字符串参与加法运算
加法:
字符参与加法运算,其实是拿字符在计算机中存储的数据值来参与运算的
‘A’ 65
‘a’ 97
‘0’ 48
字符串参加加法运算,其实做的不是加法运算,而是字符串的拼接
任何类型变字符串类型 拼一个空字符串就行
++,--:自增自减,用于对变量加1或者减1
++,-- 既可以用在变量的后面,也可以用在变量的前面。
单独使用的时候,++或者—放在变量前面或者后面,结果一样。
参与其它操作的时候:
++在后面,先拿变量做操作,然后变量在++
++在前面,先变量++,然后再拿变量做操作
赋值运算符:
基本的赋值运算符:=
扩展的赋值运算符:+=,-=,*=,/=,…
+=的操作
拿+=的左边和右边的数据做+,然后把结果赋值给左边
注意:
扩展的赋值运算符,隐含了强制类型转换
有一个变量a,a+=10
相当于 a=(a的数据类型)(a+10)
关系运算符:
==,!=,>,>=,<,<=
关系运算符的结果是boolean的类型。
逻辑运算符: &.,|,^,! &&,||
逻辑运算符用于连接关系表达式,在java中不可写成3<x<6
& 有fals则false
| 有ture则ture
^ 相同则false,不同则ture。
! ture则false,false则ture
&&和&的结果一样
||和|的结果一样
&&和&的区别:
&&有短路效果,左边为false,右边不执行
&左边无论是什么,右边都会执行。
|| 左边true 右边不执行
一个数^两次等于它本身
三元运算符:
关系表达式?表达式1:表达式2
执行流程:
A:计算机关系表达式的值,看是true还是false
B: 如果是true,表达式1就是结果
如果是false,表达式2就是结果
三元: 关系表达式:int d = (a>b)?(a>c?a:c):(b>c?b:c);
键盘录入的基本步骤和使用:
为了提高程序的灵活性,我们就把数据改进为键盘录入。
如何实现键盘录入数据: 目前我们只能使用JDK提供的类Scanner.
如何使用Scanner获取键盘录入数据:
A: 导包
import java.util.Scanner;
在一个类中顺序: pack > import > class
B: 创建键盘录入对象
Scanner sc = newScanner(System.in);
C: 接收数据
int i = sc.nextInt( );
流程控制语句:(顺序,选择,循环)
顺序结构
选择结构:
if语句 如果语句体中只有一行代码的时候可以省略{}
if语句格式1:
if(关系表达式){
语句体;
}
执行流程:
A:首先计算关系表达式的值,看是true还是false
B:如果是true,就执行语句体
C:如果是false,就不执行语句体
if 语句第二种格式:
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程:
首先判断关系表达式看其结果是true还是flase
如果是true 就执行语句体1
如果是false就执行语句体2
“if else” 可以替换” 三元运算符 “但 ”三元运算符” 不能替换”if else”
if语句格式3
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
……
else {
语句体n+1;
}
执行流程:
A:计算机关系表达式1的值,看是ture还是false
B: 如果是true ,就执行语句体1
C: 如果是false,就继续计算关系表达式2的值,看是true还是fa
D:如果是true ,就执行语句体2
E:如果是false,就继续计算关系表达式3.。。。
F:执行语句体
if 语句3 注意:
如果第一个条件成立,那么后面的条件成立,也不会执行。
if … else if 的效率比比多个if的效率要高
switch语句:
switch(表达式){
case 值:
语句体1;
break;
case 值:
语句体2;
Break;
…
default:
语句体 n+1;
Break;
}
格式解释:
表达式:byte , short ,int ,char
JDK5以后可以是枚举
JDK7以后可以是字符串
case 后面的值:用来和表达式的值进行匹配的内容
break : 表示中断的意思
default : 所有的值都不匹配的时候,就执行default
执行流程:
A: 首先计算表达式的值
B:拿着这个计算出来的值,依次和case后面的值进行比较一旦有匹配的就执行对应的语句体,在执行的过程中,遇到break结束
C:如果所有的case都不匹配,就执行语句体n+1
case 的穿透效果,匹配成功后会执行体,直到结束命令。
循环结构:
for 循环语句的格式:
for(初始化语句;判断语句条件;控制语句条件){
循环语句;
}
执行流程:
A:执行初始化语句
B: 执行判断条件语句,看其结果是true还是flase
如果是false,就结束循环
如果是true, 就继续执行
C:执行循环体语句
D:执行控制条件语句
E: 回到B继续
跟踪变量变化的时候,输出写在for循环的循环体中
要输出最终结果的时候,写在for循环外边
while循环语句格式:
初始化语句;
while(判断条件语句){
循环语句体;
控制条件语句;
}
do…while循环的语句格式:
初始化语句;
do{
循环语句体;
控制条件语句;
}while(判断条件语句);
执行流程:
A:执行初始化语句
B:执行循环语句体
C:执行控制条件语句
D:执行判断条件语句,看是true还是false
如果是false,就结束循环
如果是true,回到B继续
虽然三种循环语句可以做相同的事情,但是它们还是有区别的:
A:do…while循环至少执行一次循环体
B:for和while循环必须判断条件成立才可以执行循环体
For循环和while循环有没有区别:
For循环结束后,初始化的变量就不能被使用了。而while循环结束后,初始化的变量还可以使用。
推荐使用循环的顺序:
for – while -- do…while
break : 中断的意思
使用场景:
A:switch语句中
B:循环中
注意:
离开使用场景是没有意义的
continue :继续使用意思
使用场景:
循环中
注意:
离开使用场景是没有意义的
作用:
结束一次循环,继续下一次循环
注意:
break:结束整个循环
continue:结束本次循环,继续下一次的循环
Random的概述和基本使用 :
A:导包
import java.util.Random;
B:创建对象
Random r =new Random();
C:获取随机数
int number =r.nextInt(10); (随机数个数)+(从那开始)
获取数据的范数围:[0,10)包括0,不包括10
数组: (编号=索引 从0开始到数组的长度-1 数组名[索引)
leght(获取数组元素的个数)
存储同一种数据类型的多个元素的容器。
定义格式:
A: 数组类型[ ] 数组名;(推荐格式)
B:数组类型 数组名 [ ];
数组初始化:
A:所谓的初始化,就是为数组开辟内存空间,并为数组中的每一个元素赋予初始值。
B:我们有两种方式可以实现数组的初始化
a : 动态初始化 只给出长度,由系统给出初始化值
b: 静态初始化 给出初始化值,由系统决定长度
静态初始化:
数据类型[] 数组名 =new 数组类型[]{元素1,元素2,…};
数组类型[] 数组名 ={元素1,元素2,…};
动态初始化:
数据类型[ ] 数组名= new 数据类型[数组长度;
内存分配:
栈 : 存储的是局部变量。
局部变量就是定义在方法中的变量。
使用完毕立即回收(主方法结束栈回收)
堆 : 存储的是new 出来的东西,实体,对象
A:每一个对象都有地址值
B:每一个对象的数据都有默认值
byte,short.int.long, 0
float, double , 0.0
char ‘\u0000’
boolean false
C:使用完毕后,会在垃圾回收器空闲的时候被回收
( 指向不存在 堆 回收)
数组操作常见问题:
A:ArrayIndexOutOfBoundsException:数组索引越界异常
访问了不存在的索引
B:NullPointerException:空指针异常
数组已经不再指向堆内存的数据了,你还使用数组名访问元素
引用类型:类,接口,数组
常量,空常量,null,是可以赋值给引用类型的
二维数组 :
其实就是元素为一维数组的数组。
定义格式:
A:数据类型[][] 数据名;(推荐的格式)
B :数据类型数组名[][];
C : 数据类型[]数组名[];
初始化:
A :动态初始化
数据类型[][] 数组名 =new 数据类型[m][n];
B :静态初始化
数据类型[][] 数组名 =new 数据类型[][]{{元素…},{元素…},..};
简易格式:
数组类型[][] 数组名 ={{元素..},{元素…},…}
System.out.println():输出内容并换行
System.out.ptintln():输出内容不换行
基本类型 不加new
静态数组 两种写法区别:
int [] arr ={1,2,3};
arr ={2,3,4}; 会报错
arr = new int[]{4,5,6}; 这个对
方法:
其实就是完成特定功能的代码块
定义格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){
方法体;
return 返回值;
}
return 结束方法
格式解释:
A:修饰符 目前记住public static
B : 返回值类型 用于限定返回值的数据类型
C:方法名 为了方面我们调用方法的名字
D:参数类型 用于限定调用方法时传入的数据的类型
E : 参数名 用于接收调用方法时传入的数据的变量
F:方法体 完成功能的代码
G:return 结束方法,并且把返回值带给调用者
写一个方法有两个明确:
A:返回值类型 明确功能结果的数据类型
B:参数列表 明确有几个参数,以及参数的数据类型
方法的调用:(有明确返回值的方法调用)
A:单独调用,没有意义
B:输出调用,有意义,但是不够好,因为我可能需要拿到结果进行进一步的操作
C:赋值调用,推荐使用方法
void修饰的方法的调用:
只能单独使用
方法重载:在同一个类中,出现了方法名相同的情况。
方法重载特点:
方法名相同,参数列表不同。与返回值无关。
参数列表不同:
参数的个数不同
参数对应的类型不同
不能出现方法名相同,参数列表也相同
注意:
在调用方法的时候java虚拟机会通过参数列表的不同来区分同名的方法。
方法的参数如果是基本数据类型:形式参数的改变不影响实际的参数。
形式参数:用于接收实际参数的变量
实际参数:实际参数与运算的变量
如果方法的参数是基本数据类型:
形式参数的该变不影响实际参数
如果参数是引用数据类型:
形式参数的改变直接影响实际参数
断点调试的作用及步骤:
断点调试的作用:
A:查看程序的执行流程
B:调试程序
断点: 就是一个标记
不会的地方加
如何加:
在代码区域的左边双击即可
如何运行加断点的程序:
代码区域—右键—Debug As—JavaApplication
弹出一个框框让我们选择是否进入debug视图,我们选择yes。并且把记住选择选上
如何让程序往下执行:
F6
看那些区域:
代码区域:看程序的执行流程
Debug区域: 看程序的执行流程
Variables:看变量的变化
Console:看程序的输入和输出
删除断点:
A:把加断点的的动作再来一遍
B: 在Debug视图中找到Breakpoints,选中要删除的断点点击爽x即可
断点必须加在有效的语句上。
面向对象:
基于面向过程的编程思想。
面向过程:
强调的是每一个功能的步骤
面向对象:
强调的是对象,然后由对象去调用功能
表示现实世界的事物:
属性: 就是事物的描述信息
行为: 就是事物能够做什么
Java语言最基本单位是类,通过类来实现现实世界事物的
类: 是一组相关的属性和行为的集合
对象: 就是该事物的具体体现
类的定义: 类是用来描述现实世界的事物的
事物:
属性 事物的描述信息
行为 事物能够做什么
类是如何和事物进行对应的:
类:
属性 成员变量
行为 成员方法
成员变量:
位置不同:类中,方法外
初始化值:不需要给初始化值
成员方法:
去掉static关键字
使用一个类,其实就是使用该类的成员。(成员变量和成员方法)
而我们要想使用一个类的成员,就必须首先拥有该类的对象。
拥有一个类的对象—创建一个对象
格式: 类名 对象名= new 类名();
访问成员:
成员变量:对象名,变量名
成员方法:对象名,方法名(可能有参数)
成员变量跟随对象进入堆内存
成员变量和局部变量的区别:
A:在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
B: 在内存中的位置不同:
成员变量: 堆内存
局部变量:栈内存
C:生命周期不同:
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值得问题
成员变量:有默认值
局部变量:没有默认值。必须先定义,先赋值,后使用
不让外界对象直接访问成员变量
Private关键字
private:
是一个修饰符
可以修饰成员变量,也可以修饰成员方法
被private修饰的成员只能在本类中被访问
针对private修饰的成员变量,我们会相应的提供getXxx( )和setXxx()用于获取和设置成员变量的值
set没有返回值,get有返回值。
如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近原则。局部变量name赋值给成员变量name:
用this关键字就可以解决这个问题;
This:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
使用场景:
局部变量隐藏成员变量
构造方法:
给对象的数据进行初始化
格式:
方法名和类名相同
没有返回值类型,连void都不能写
没有具体返回值
通过new 关键字调用
格式: 类名 对象名=new 构造方法(可能有可能没有参数…)
构造方法的注意事项:
A:如果我们没有给出构造方法,系统将会提供一个默认的无参构造方法供我们使用
B:如果我们给出了构造方法,系统将不再提供默认的无参构造方法供我们使用。这个时候,如果我们想使用无参构造方法,就必须自己提供。
推荐:自己给无参构造方法
C:构造方法也是可以重载的
成员变量赋值:
A:setXxx()方法
B:带参构造方法
但对于一个对象而言构造方法只能调用一次
但是set方法可以调用无数次
所以set 方法可以用来给成员变量修改值。
类名作为形式参数:其实这里需要的是该类对象
如果方法的返回值是类名:其实返回的是该类的对象
nextline不能和其他的next方法在一起使用,否则会有问题
当你想输入一个数字和字符串的时候,我们只能使用next()来输入一个字符串
String: 字符串类
由多个字符组成的一串数据
字符串其本质是一个字符数组
字符串的内容是存储在方法区的常量池里面的。是为了更方便字符串的重复使用
构造方法:
String(String original):把字符串数据封装成字符串对象
String(char[] value):把字符数组的数据封装成字符串对象
String(char[] value,int index,int count)把字符组中的一部分数据封装成字符串对象从index开始count个
注意: 字符串是一种比较特殊的引用数据类型,直接输出字符串对象输出的应该是对象中的数据。
Object :是类层次结构中的根类,所有的类都直接或者间接的继承自该类。
如果一个方法的形式参数是Object,那么这里我们就可以传递它的任意的子类对象。
String类的判断功能:
booleanequals (Object obj):比较字符串的内容是否相同
booleanequalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
booleanstartsWith(String str):判断字符串对象是否以指定的str开头
BooleanendsWith(String str);判断字符串是否以指定的str结尾
String类的获取功能:
intlength():获取字符串的长度,其实也就是字符个数
charcharAt(int index):获取指定索引处的字符
intindexOf(String str):获取str在字符串对象中第一次出现的索引
Stringsubstring(int start):从start开始截取字符串
Stringsubstring(int start ,int end):从start 开始,到end 个后结束截取字符串
String类的转换功能:
char[]toCharArray():把字符串转换为字符数组
StringtolowerCase(): 把字符串转换为小写字符串
StringtoUpperCase(): 把字符串转换为大写字符串
String类
去除字符串两端空格:
Stringtrim()
按照指定符号分割字符串:
String[]split(String str)
StringBuilder : 是一个可以变的字符串。字符串缓冲曲区类。
String和StringBuilder的区别:
String的内容是固定的。
StringBuilder的内容是可以改变的。
构造方法:
StringBuilder()
成员方法:
publicint capacity():返回当前容量
publicint length():返回长度(字符)
容量:理论值
长度:实际值
添加功能:
PublicStringBuilder append(任意类型):添加数据,并返回自身对象
反转功能:
PublicStringBuilder reverse()
StringBuilder和String的相互转换:
StringBuilder----String
PublicString toSting():通过toString就可以实现;
String ---- StringBuilder
StringBuilder(Stringstr):通过构造方法就可以实现;