一.JVM,JRE,JDK的概述
1.什么是跨平台?
平台:指的是操作系统(Windows,Linux,Mac)
跨平台:Java程序可以在任意操作系统上运行,一次编写到处运行
原理:实现跨平台需要依赖Java的虚拟机 JVM
2.JVM JRE JDK说明
1.什么是JVM?
JVM是Java虚拟机,Java程序需要运行在虚拟机上,不同平台有自己的虚拟机
2.什么是JRE?
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JRE:JVM+类库。
3.什么是JDK
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK, 就不用在 单独安装JRE了。
其中的开发工具:编译工具(javac.exe) ?打包工具(jar.exe)等
? JDK:JRE+JAVA的开发工具。
4.为什么JDK中包含一个JRE
为什么JDK中包含一个JRE呢?
开发完的程序,需要运行一下看看效果。
5.JDK,JRE,JVM的作用和关系
JDK包含JRE 和开发工具包
JRE 包含 核心类库和JVM
二.JDK的下载和安装
a.下载:http://www.oracle.com
b.安装:参考文档
c.JDK安装路径下的目录解释
bin:存放可执行程序,如windos系统中的exe文件;有哪些:javac.exe;java.exe
jre:java程序的运行时环境
src.zip:JDK的核心源代码,src即source的意思
三.开发工具介绍
1).notepad(记事本)
2).Editplus,还有:notepad++
3).Eclipse,还有:MyEclipse,idea
四.HelloWorld案例
编写步骤:
1).切换到JDK安装路径下的bin目录
2).编写Java文件
新建一个文本文件,将后缀名改为.java
3).编译Java文件(会生成一个.class文件)
在当前目录下按住shift点击鼠标右键,弹出DOS命令行,输入javac 文件名(是java文件的文件名,带后缀)
4).运行Java文件
在DOS命令行中,输入java 文件名(是class文件的文件名,不带后缀)
注意事项(具体内容参考大纲)
书写格式:
1).大括号成对写,并且要对其
2).左大括号左面要有空格
3).遇到左大括号要缩进(Tab键)
4).运算符两侧加空格,如 5+2--> 5 + 2
五.Path环境变量
1).为什么需要配置path环境变量?
2).配置了path环境变量之后有什么好处?
a.这样我们就可以在任意盘符,任意文件去使用javac,java这样的应用程序
--->意味着我们可以在任意盘符,任意文件中去编写我们的代码
3).path环境变量的配置方式1(了解)
4).path环境变量的配置方式2(重点!!!)
a.新建系统变量JAVA_HOME
b.将JAVA_HOME配置到Path中,配置方法:%JAVA_HOME%\bin
六.注释
1).分类
a.单行注释:
//注释内容
b.多行注释:
/*
注释内容
注释内容
注释内容
*/
c.文档注释:
/**
*/
2).作用
a.解释说明程序
b.调错
七.关键字
1).什么是关键字?
被java赋予特定含义的单词
2).特点:
组成关键字的字母全部小写
3).注意事项:
我们在起名字的时候不能使用关键字
八.标识符
1).什么是标识符:就是给类,接口,方法,变量起的名字
2).标识符的组成
* 英文大小写字母
* 数字
* $和_
3).注意事项(重点!!!):
1.不能使用关键字
2.不能以数字开头
3.如果你要使用符号,只能使用$和_
4).常见命名规则(重点!!!):
* 包:把包理解成我们的文件夹,一般是公司域名倒着写,com.itheima
* 类或者接口
如果是一个单词,首字母大写
如果是多个单词,每个单词的首字母都大写
* 方法或者变量
如果是一个单词,全部字母小写
如果是多个单词,从第二个单词开始首字母大写
* 常量
如果是一个单词,全部字母大写
如果是多个单词,每个单词之间用_分开
九.常量
字面值常量
字符串常量 用双引号括起来的内容
整数常量 所有整数
小数常量 所有小数
字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母,单个符号
布尔常量 true,false
空常量 null(数组部分讲解)
自定义常量(面向对象部分讲解)
十.变量(重点!!!)
1).什么是变量?
在程序执行的过程中,其值可以发生改变
2).为什么有变量?
用来不断的存放同一类型的常量,并可以重复使用
3).变量定义格式
数据类型 变量名 = 变量值;
十一.数据类型(重点!!!)
1).为什么有数据类型?
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间
基本数据类型(四类八种)
整数型
byte 占1个字节 -128到127
short 占2个字节
int 占4个字节
long 占8个字节
浮点型(小数型)
float 占4个字节
double 占8个字节
字符型
char 占2个字节 0-65535
布尔型
boolean 他的值要么是true,要么是false
引用数据类型(面向对象部分讲解)
*** 练习:定义不同数据类型的变量,并输出
2).使用变量的注意事项
* a:作用域问题
* 同一个区域不能使用相同的变量名(我们目前的同一个区域指的就是main方法)
* b:初始化值问题
* 局部变量在使用之前必须赋值
* c:一条语句可以定义几个变量
* int a,b,c...;
十二.数据类型转换
1).隐式转换
class Test {
public static void main(String[] args) {
byte a = 3;
int b = 4;
//byte + int---->小的数据类型与大的数据类型运算的时候,小的数据类型会自动提升为大的数据类型
int c = a + b;
//b = a + b;
System.out.println(c);
}
}
2).强制转换
class Test {
public static void main(String[] args) {
byte a = 3;
int b = 4;
a = (byte)(a + b);//注意:byte需要使用小括号括起来
System.out.println(a);
}
}
eclipse:
eclipse的安装和使用:eclipse是用java开发的 所以他的打开是要有配置jdk的环境变量
运算符:
算术运算符
表达式:用符号连接的式子(不能自成语句),除了复制运算符;
+ - * /
注意:/ 整数相除 得整数 要想结果得到小数 必须有小数参加运算符
% : 取余数
字符和字符串参加运算符:
+:字符串连接符 (紧挨着字符串的那两个+号是字符串连接符)
字符和int值相加:
字符会变成值 再去加。 为什么字符会变成值呢?
涉及到了编码表。 因为计算机只能存储数,怎么存储 字符呢? 由编码表对应去存。
++ --
int a = 10;
// 当 ++ 放在变量的后面 ,a自己+1 ,a++整体不便
//int b = a++;
// 当++ 放在变量的前面, a自己+1, ++a整体+1
int b = ++a;
System.out.println(a); //11
System.out.println(b); //
逻辑运算符
& : 和 真和假 有假则假
| : 或 真或假 有真则真
^ : 异(是否不同) 是不同 真, 是相同 假,
! : 非 取反 非真则假 非假则真
参与逻辑运算符的量 都必须是 Boolean类型的, 结果也都是Boolean类型的
&&:和&执行结果一样, && 效率高。 true && false ,当左侧是false的时候 右边不再看
||:
关系运算符
== != > <
有关系运算符计算出来的结果 都是boolean类型的
System.out.pritln(a=b); 打印的b的值
赋值运算符
int a = 1;
+= -= *=
三元运算符
(条件表达式)? TRUE:FALSE;
例题:比较三个数的最大值
a > b && a > c ? a : (b > c) ? b : c;
键盘录入:
练习题: 键盘输入两个数, 打印出较大的那个值。
1:第一步:导包
在类的上面写 import java.util.Scanner;
2:第二步: 创建Scanner对象
Scanner sc = new Scanner(System.in);
3: 第三步: 对象调nextInt()方法
int a = sc.nextInt();
import java.util.Scanner;
public class ScannerTest{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int a = sc.nextInt();
System.out.println("请输入第二个数");
int b = sc.nextInt();
System.out.println(a>b?a:b);
}
}
选择流程控制语句
顺序结构概述
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
if语句的格式
第一种:
if(关系表达式) {
语句体
}
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
if语句第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
switch语句的格式及执行流程
执行流程
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
for循环的格式及基本使用
for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程:
A:执行初始化语句
B:执行判断条件语句,看其结果是true还是false
如果是false,循环结束。
如果是true,继续执行。
C:执行循环体语句
D:执行控制条件语句
E:回到B继续
while循环语句格式
基本格式:
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
do…while循环语句格式
基本格式
do {
循环体语句;
}while((判断条件语句);
扩展格式
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
三种循环的区别
虽然可以完成同样的功能,但是还是有小区别:
do…while循环至少会执行一次循环体。
for循环和while循环只有在条件成立的时候才会去执行循环体
for循环语句和while循环语句的小区别:
使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
Break的使用场景和作用
break的使用场景:
在选择结构switch语句中
在循环语句中
break的作用:
跳出单层循环
continue的使用场景:
在循环语句中
离开使用场景的存在是没有意义的
continue的作用:
单层循环对比break,然后总结两个的区别
break 退出当前循环
continue 退出本次循环
选择流程控制语句
顺序结构概述
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
if语句的格式
第一种:
if(关系表达式) {
语句体
}
执行流程:
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体
如果是false就不执行语句体
if语句第二种格式:
if(关系表达式) {
语句体1;
}else {
语句体2;
}
执行流程
首先判断关系表达式看其结果是true还是false
如果是true就执行语句体1
如果是false就执行语句体2
if语句第三种格式:
if(关系表达式1) {
语句体1;
}else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
switch语句的格式及执行流程
执行流程
首先计算出表达式的值
其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
for循环的格式及基本使用
for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
执行流程:
A:执行初始化语句
B:执行判断条件语句,看其结果是true还是false
如果是false,循环结束。
如果是true,继续执行。
C:执行循环体语句
D:执行控制条件语句
E:回到B继续
while循环语句格式
基本格式:
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
do…while循环语句格式
基本格式
do {
循环体语句;
}while((判断条件语句);
扩展格式
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
三种循环的区别
虽然可以完成同样的功能,但是还是有小区别:
do…while循环至少会执行一次循环体。
for循环和while循环只有在条件成立的时候才会去执行循环体
for循环语句和while循环语句的小区别:
使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。
Break的使用场景和作用
break的使用场景:
在选择结构switch语句中
在循环语句中
break的作用:
跳出单层循环
continue的使用场景:
在循环语句中
离开使用场景的存在是没有意义的
continue的作用:
单层循环对比break,然后总结两个的区别
break 退出当前循环
continue 退出本次循环
方法(函数):
方法的定义格式:
修饰符 返回值 方法名(参数类型 参数名,参数类型,参数名2,...) {
方法体;
return 返回值;
}
注意事项:
方法绝对不能嵌套,
方法不调用就不会执行
方法的作用是为了提高代码的复用性;
方法的调用:
有返回值的方法,可以输出调用,也可以直接调用,
void 方法的调用:
当一个方法执行之后,不需要让这个方法返回一个值.那么这个方法的返回值写void
注意:void方法中也可以写return,但是return不能写值;
方法的重载:
当一个类中,出现方法名相同,参数列表不同,与返回值无关,我们称这两个方法之间是重载关系
重载: 方法名必须相同,参数列表必须不同 , 返回值无关;
基本类型的参数传递
形式参数的改变不影响实际参数; 原因是因为 基本类型的数是存在栈内存中。
内存:
栈: 执行方法用的
堆: 存储一些引用型数据的 数组
方法区:存储一些class文件的
本地方法区: 存储一些本地方法的
寄存器:cpu
引用类型的参数传递
形式参数的改变会影响实际参数, 原因是因为,引用类型的数据存在堆内存中,可以有很多个引用执行的,很多个引用共享他。
Eclipse断点调试
1.1Eclipse断点调试概述
Eclipse的断点调试可以查看程序的执行流程和解决程序中的bug
1.2Eclipse断点调试常用操作:
A:什么是断点:
就是一个标记,从哪里开始。
B:如何设置断点:
你想看哪里的程序,你就在那个有效程序的左边双击即可。
C:在哪里设置断点:
哪里不会点哪里。
目前:我们就在每个方法的第一条有效语句上都加。
D:如何运行设置断点后的程序:
右键 -- Debug as -- Java Application
E:看哪些地方:
Debug:断点测试的地方
在这个地方,记住F6,或者点击也可以。一次看一行的执行过程。
Variables:查看程序的变量变化
ForDemo:被查看的源文件
Console:控制台
F:如何去断点:
再次双击即可
找到Debug视图,Variables界面,找到Breakpoints,并点击,然后看到所有的断点,最后点击那个双叉。
断点调试:
A:查看程序的执行流程
B:调试程序
断点:
其实就是一个标记
在哪里加呢?
想加哪里就加哪里,一般是加在我们看不懂的地方
如何加呢?
在代码区域的最左边双击即可
如何运行加断点的程序呢?
代码区域 -- 右键 -- Debug as -- Java Application
会弹出一个页面让我们选择是否进入debug模式,选择yes。
如何让程序往下执行呢?
Step Over 执行下一步
F6
看那些区域呢?
代码区域:看程序的执行步骤
Debug区域:看程序的执行步骤
Variables:看变量的创建,赋值,销毁等
Console:看程序的输入和输出
如何去除断点:
A:把加断点的动作再来一遍
B:在debug视图中,找到Breakpoints,选中断点,点击双x即可
面向对象和面向过程
面向过程: 这个过程很复杂,很繁琐,要自己动手自己去做.
面向对象: 去找个对象,让对象去做,自己悠闲.
类和对象:java描述一类事物的时候:定义为类
我们所找的对象帮我们做事情, 这个对象 就是那一类事物中的一员
事物:
属性:姓名 年龄 性别...
行为:能做什么
应该在类当中定义为:
成员变量:
类中 方法外面;
不需要初始化;
局部变量
定义在方法里面的变量,这样的变量叫做局部变量 这样的变量在使用之前必须先初始化。
成员方法:
普通的方法 但是去掉static
成员变量和局部变量的区别:
写的位置不同:
成员变量:类中 方法外
局部变量: 方法内
内存位置不同:
成员变量: 堆
局部变量: 栈
声明周期:
成员变量:随着对象的创建而存在 随着对象的消失而消失
局部变量:随着方法的调用而存在 随着方法的调用完毕而消失
初始化:
成员变量:有默认初始化
局部变量:没有默认初始化 : 所以使用之前必须先赋值。
private 关键字: 修饰成员的关键字(一般用来修饰成员变量)
别private修饰的成员只能在本类中访问,之外的任何地方都不能直接访问
一般用private修饰的成员变量会对外界提供一个setXxx()和getXxx()的方法
封装:
把不需要对外展示的内容 隐藏起来,并对外提供公共的访问方式。
比如面向对象: 成员变量加private 提供公共的set和get方法。
好处:安全, 提高代码的复用性
就近原则:
方法内,在使用变量的时候,会先去局部范围找这个变量,有就使用, 如果没有 才去成员位置找这个变量, 如果有就使用,如果没有就报错了。
this:
代表的是当前类的当前对象
this说: 谁调用我 我就是谁
构造方法:
1:创建对象的时候 就肯定会调用构造方法;
顾名思义: 为了创建对象而存在的方法
2:如果我们在一个类中没有给出任何构造方法, 系统会提供一个默认的 无参构造。
3:如果我们提供了任何构造方法,系统就不会再听默认的无参构造方法了
4:一个类中可以有多个构造方法,只要参数列表不同即可,也就是构造方法可以重载。
|
|