java语言平台:
JAVA.SE:桌面应用开发程序(如坦克大战)
JAVA.ME:手机嵌入式开发
JAVA.EE:企业版应用程序
环境搭建
JVM
JRE:运行环境
JDK:JRE+开发工具(javaa.exe,java.exe)
java语言特点:
跨平台(移植性),开源性
常用DOS命令:
win+r cmd回车
常用命令:
d : 回车 盘符切换
dir:显示当前目录
cd+目录名称
cd..回车,(回退)
cd\多级回退
cls清屏
exit :退出dos
关键字概述及特点:
被java预言赋予了特定含义的单词.
特点:
a.组成关键字的字母全部小写
b.常用的代码编辑器.有特殊的字体颜色
常量.变量.数据类型,标识符:
常量:在程序执行中,其值不可以发生改变的量
分类:a.整数
b.小数常量
变量:在程序执行中,其值可以某个范围内发生改变的量( 是内存中的一小块区域)
组成:
a.对区域要有限定
b.不需对区域给一个名称
c.区域内必须有内容
数据类型 变量名 = 初始化值
数据类型:
分类:A.基本数据类型
B.引用数据类型(类.接口,数组)
基本数据类型:
四类八种
*整数默认为int类型,浮点数默认为double
*float类型后面需要加F,long类型后面可以加L或者不加
不加在于取值在int的取值范围中
*float取值范围比long的取值范围小
标识符的组成和注意事项:
常见命名规则:
a.包(全部小写,多级包用.隔开)
b.类
c.方法和变量
int a;
a = 10;与int a = 10 一样
int a,b;
a = 10;
b = 20;与int a = 10;
int b = 20;
数据类型中的转换:
隐式类型转换(自动类型提升)
强制类型转换
目标类型 变量名 = (目标类型) (被转化的数据)
byte d = (byte) (a+b)
不同类型之间做运算的取值范围:
byte short char---int---long----float double
快捷键及内容辅助键:
内容辅助键:
使用main方法:alt + /
使用输出语句:alt + /
快捷键:
单行选中内容:ctrl + /,再来一次取消
多行选中内容;ctrl+shift+/,取消ctrl+shift+\
格式化:ctrl+shift+f或者右键--source--format
算术运算符的基本用法:
1.运算符:就是用于对常量和变量进行操作的符号
2.表达式:用于运算符连接起来的符合java语法的式子.不同的运算符连接的表达方式是不同类型的表达式.
3.运算符分类:
算术运算符:
a.当左边的绝对值小于右边的绝对值时,结果是左边;
b.当左边的绝对值等于右边的绝对值时,结果为0
c.当左边的绝对值大于右边的绝对值时,结果是余数
d.%运算符结果的符号只和左边有关,与右边无关
e.任何正整数%2结果不是0就是1可以用来当做切换条件
+,-,*,/,%,++,--
注意:整数相除只能得到整数,如果想要得到小数,必须要有浮点数参与运算.
%用于获取两个数据相除的时候余数
/:用于获取两个数据相除是的商
字符参与加法运算,其实是拿字符再计算机中存储的数据值来参与运算
7
'A'65
'a'97
'0'48
字符串参与运算:其实做的不是加法运算,而是做的字符串的拼接 (当常量在前要先运算在拼接)如:
int a = 10;int b = 20
System.out.println("hello" + a + b )===>>hello1020
int a = 10;int b = 20
System.out.println(a + b + "hello")===>>30hello
++,--单独使用时,++或者--放在前面或者后面结果一样.
++,--参与运算
++在前面,先自身+1在参与运算
++在后面,先提出a参与运算,在自身+1
--同理
*****扩展的赋值运算符,隐含了强制类型转换
赋值运算符 :
基本赋值运算符:=
扩展的赋值运算符:+=,-=,*=,/=,%=
关系运算符:==,!=,<,>,<=,>=
关系运算符的结果为boolean类型
*****关系表达式.条件表达式.布尔表达式的关系.都是布尔类型
注意事项:千万不要把两个=写成一个=,一个就为赋值含义,两个才是比较是否相等.
逻辑运算符
&遇false则false
|遇true则true
^两边相同为false,两边不同为true
!非false则false,非非false则false
&&具有断路作用,当第一个判断为false时,后面不执行
||具有短路作用,当第一个判断为true时,后面不执行
三元运算符:
关系表达式?表达式1:表达式2
A.执行流程:a.计算关系表达式的值,看是ture还是false
b.如果是ture,表达式1执行,如果是false,执行表达式2
如:class Dome2 { //比较三个数最大值
public static void main(String[] args) {
int a = 30;
int b = 40;
int c = 90;
int temp = (a<b)?b:a;
int max = (temp>c)?temp:c;
System.out.println("max = " + max);
}
}
键盘录入的基本步骤和使用:
键盘录入:
为了提高程序的灵活性,我们就把数据改进为键盘录入.
使用步骤:a.导包
import java.util.Scanner;
在一个类中顺序:package>import>class
b.创建键盘录入对象:
Scanner sc = new Scanner(System.in);
c.接收数据(调用Scannner对象)
int i = sc.nextInt();
例子:
import java.util.Scanner;
class Dome2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请键盘输入一个值");
int i= sc.nextInt();
System.out.println("i = " + i);
}
}
键盘录入两个值,求两个值的和:
例子: import java.util.Scanner;
class Dome2 {
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();
int sum = a + b ;
System.out.println("sum = " + sum);
}
}
/*import java.util.Scanner;
class Dome2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请键盘输入一个值");
int i= sc.nextInt();
System.out.println("i = " + i);
}
}
import java.util.Scanner;
class Dome2 {
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();
int sum = a + b ;
System.out.println("sum = " + sum);
}
}*/
*内容辅助键:
* A.main方法:
* 先输入main 然后alt + / 然后回车
* B.输出语句:
* 先输入syso 然后alt + / 然后回车
*
*往下复制 :
* 选中一行 然后crtl + alt +下键
*往上复制同理
*
*往下移动
* 选中一行 然后alt + 下键
*往上移动同理
*
*光标在某一行的随便一个位置时 用shift + 回车 可以直接打开新的一行
*
*添加多行注释:
* 选中需要添加的部分 shift + alt +/(带问号的那个键)
取消多行注释:
*选中已经添加多行注释的部分 shift+alt+\(带|的这个键)
添加单行注释:
选中需要添加的部分 ctrl + /(带问号的那个键)
取消单行注释:
选中需要添加的部分 ctrl + /(带问号的那个键)
*删除一行:
* 光标在某一行 然后ctrl + d
*
_Java开发工具(Eclipse工作空间的基本配置)(掌握)
* A:程序的编译和运行的环境配置(一般不改)
* window -- Preferences -- Java
* 编译环境:Compiler 默认选中的就是最高版本。
* 运行环境:Installed JREs 默认会找你安装的那个JDK。建议配置了Java的环境变量(不配找不到)。
* 问题:
* 低编译(编译的版本比较低),高运行(运行的版本比较高)。可以。
* 高编译,低运行。不可以。
* 建议,编译和运行的版本一致。
* B:如何去掉默认注释?
* window -- Preferences -- Java -- Code Style -- Code Templates--Code
* 选择你不想要的内容,通过右边Edit编辑。
* 注意:请只删除注释部分,不是注释部分的不要删除。
* C:行号的显示和隐藏
* 显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。
* 隐藏:把上面的动作再做一次。
* D:字体大小及颜色
* a:Java代码区域的字体大小和颜色:
* window -- Preferences -- General -- Appearance -- Colors And Fonts --Java修改 -- Java Edit Text Font--edit进行修改
* b:控制台
* window -- Preferences -- General -- Appearance -- Colors And Fonts -- Debug -- Console font
* c:其他文件
* window -- Preferences -- General -- Appearance -- Colors And Fonts -- Basic -- Text Font
* E:窗体给弄乱了,怎么办?
* window -- Reset Perspective
* F:控制台找不到了,怎么办?
* Window--Show View—Console
* G:取消悬浮提示(将鼠标停留在某个类上所出现的提示信息)
* window -- Preferences -- Java--Editor--Hovers。右边将Combined Hover勾去掉。
* 这样代码的悬浮框就不会自动出现了。如果想看提示,将光标悬浮在代码上,按F2即可。
运算符:
算数运算符
整数相除,结果还是整数
注意事项:
* a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符
* b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
* c:/获取的是除法操作的商,%获取的是除法操作的余数
* %运算符
* 当左边的绝对值小于右边绝对值时,结果是左边
* 当左边的绝对值等于右边或是右边的倍数时,结果是0
* 当左边的绝对值大于右边绝对值时,结果是余数
* %运算符结果的符号只和左边有关系,与右边无关
* 任何一个正整数%2结果不是0就是1可以用来当作切换条件
'a' 97
'A' 65
'0' 48
'A' + 10 ==> 65 + 10 = 75
字符串与任何数据做加法运算,都会产生一个新的字符串
"abc" + 10 + 20 ==> "abc10" + 20 ==> "abc1020"
10 + 20 + "abc" + 10 + 20 ==> 30 + "abc" + 10 + 20 ==> "30abc" + 10 + 20 ==> "30abc1020"
++ --
byte a = 10;
a += 20;
逻辑运算符
& : 有假则假
| : 有真则真
! : 事物的另一面
^ : 相同为false,不同为true
&& 和 & 的区别:
& 是左右两边都需要进行计算
&& 如果左边为false,右边不执行
|| & | 的区别:
| 是左右两边都需要进行计算
|| 如果左边为true,右边不执行
三元运算符(三目运算符)
关系表达式 ? 表达式1 : 表达式2(表达式必须是一个具体的结果.不能是输出语句)
int a = 20;
int b = 30;
int result = a > b ? a : b;
boolean flag = (a == b ? true : false);
boolean flag = (a == b);
流程控制语句:
分类:
顺序结构:从上而下,依次执行
选择结构(分支结构):
A.if(关系表达式) {
语句体
}
B. if (关系表达式) {
语句体1
}else {
语句体2
}
C. if (关系表达式) {
语句体1
}else if (关系表达式) {
语句体3
}else { (else可以省略不写,但是建议书写,我么所考虑的条件可能并不全面,需要让else来表示我们考虑不到的内容)
语句体4
}
语句体2
循环结构:switch语句
switch(表达式) {
case1:
语句体1;
break;
case21:
语句体1;
break;
case3:
语句体1;
break;
.........
default:
语句体n+1;
break;
}
格式解释:
byte,short,int,char
JDK5以后可以使用枚举,
JDK7以后可以使用字符串(String)
case:的值就是用以来和表达式的值进行匹配的内容
default:所有的值都不匹配时,就执行default(可以省略不写)
****8如果所有的case都不匹配,就执行语句体n+1
****当语句中没有break时,会直接形成穿透,就算有case值满足但是没有break就不会结束,直接进行下一个case值判断,直到遇到default
*****switch语句结束的两种情况:
a.遇到break结束
b.遇到switch语句的右大括号结束
for 语句和while 语句及do...while语句的区别;
for语句在循环后所设置的变量不能被使用,
while语句在循环后所设置的变量可以被使用
do...while语句在循环中至少要在执行一次
跳转控制语句break的概述和基本使用
break:中断的意思
使用场景:a.switch语句中
b.循环中
作用:用于结束循环
continue:继续的意思(结束本次循环,但是会继续下次循环)
使用场景:循环中
***离开循环是没用的
********键盘录入时导包的三种方式:
a.ctrl+shift+o
b.手动导入
c.鼠标点击
Random:用于产生随机数,
使用步骤:
A.导包
import java.util.Random;
B.创建对象
Random r = new Random();
C.获取随机数
int number = r.nextInt(10);
获取数据的范围[0,10).包括0,不包括10
如何获取[0,10]之间的数?
int number = r.nextInt(100)+1
Random 练习猜数字小游戏:
分析:a.首先利用 Random 获取一个0-100之间的随机数字
b.然后键盘输入一个感觉能够猜中的数字
c.比较这两个数据,用if语句实现
1.当猜的数字比随机生成的数字大,提示猜的数字大了
1.当猜的数字比随机生成的数字大,提示猜的数字小了
1.当猜的数字与随机生成的数字相等,提示恭喜您猜中了
d.但是在竞猜过程中不太现实一次就能猜中,所以需要进行多次竞猜,利用while语句的死循环进行操作
例: import java.util.Random; //导包
public class RandomTest { //创建的类
public static void main(String[] args) {
//系统产生一个随机数字
Random r = new.Random();
//这个随机数字在0-100之间
int number = r.nextInt(100)+1;
while(true) { //多次猜数字
//键盘录入我们要猜的数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要猜的数据(0-100):");
int a = sc.nextInt();
//判断输入的数据与产生的随机数字是否相等
if (a>number) {
System.out.println("你输入的数据" + a + "大了");
} else if (a<number) {
System.out.println("你输入的数据" + a + "小了");
} else {
System.out.println("恭喜你猜中了");
break;
}
}
}
}
数组概念;
数组是存储同一种数据类型多个元素的容器。
数组既可以存储基本数据类型,也可以存储引用数据类型
数组的定义格式:
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值的
数组初始化的概述:
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
动态初始化:
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数
举例:
int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值
********数组前后的数据类型要一致
定义格式:
* A:数据类型[] 数组名;
* B:数据类型 数组名[];
* 举例:
* A:int[] a; 定义一个int类型的数组,数组名是a
* B:int a[]; 定义一个int类型的变量,变量名是a数组
*
* 数组初始化:
* A:所谓初始化,就是为数组在内存中开辟连续内存空间,并为数组中的每个元素赋予初始值
* B:我们有两种方式对数组进行初始化
* a:动态初始化 只指定长度,由系统给出初始化值
* b:静态初始化 给出初始化值,由系统决定长度
*
* 动态初始化:
* 数据类型[] 数组名 = new 数据类型[数组长度];
静态初始化的格式:
* 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
*
* 简化格式:
* 数据类型[] 数组名 = {元素1,元素2,...};
*
* 举例:
* int[] arr = new int[]{1,2,3};
*
* 简化后:
* int[] arr = {1,2,3};
静态初始化简写后:
局限性,数组的声明与赋值分开写的时候,简写形式行不通
int[] arr = {1,2,3};
int[] arr;
arr = {1,2,3};*******这种方式行不通
jvm内存划分:
栈 存储局部变量(方法声明上.或者方法中声明的变量),使用完毕立即回收
堆 存储new出来的东西,使用完毕.在垃圾回收器空闲 的时候回收
方法区 (面向对象进阶讲)
本地方法区 (和系统相关)
寄存器 (给CPU使用)
数组使用的两个小问题:
两个常见小问题:
* A:java.lang.ArrayIndexOutOfBoundsException
* 数组越界异常
* 产生的原因:就是你访问了不存在的索引元素。
* B:java.lang.NullPointerException
* 空指针异常
* 产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
* 为什么我们要记住这样的小问题呢?
* 编程不仅仅是把代码写出来,还得在出现问题的时候能够快速的解决问题。
*/ ************null只能赋值给引用数据类型变量
public class ArrayDemo {
public static void main(String[] args) {
// 定义数组
int[] arr = { 1, 2, 3 };
//System.out.println(arr[3]);
//引用类型:类,接口,数组
//常量:空常量 null,是可以赋值给引用类型的
//arr = null;
System.out.println(arr[1]);
}
}
数组的遍历:
依次输出数组中的每一个元素
为了解决我们去数数组中元素的个数,数组就提供了一个属性:length
用于获取数组元素的个数
格式:数组名.length
例:System.out.println("数组中元素一共有" + arr.length + "个");
二维数组:其实就是元素为一维数组的数组
定义格式:
A.数据类型 [] [] 数组名;(推荐方式)
B.数据类型数组名[] []
C.数据类型[] 数组名 []
初始化:
A.动态初始化
数据类型 [] [] 数组名 = new 数据类型{m} {n}
m表示是二维数组中一维数组的个数
n表示是一维数组的个数
B.静态初始化:
数据类型 [] [] 数组名 = new 数据类型 [] [] {{元素...},{元素...},{元素...}}
简化格式
数据类型 [] [] 数组名 = {{元素...},{元素...},{元素...}}
例子:
int[] [] arr = {{1,2,3},{4,5,6},{7,8,9}}
System.out.println(arr);[[I@104c575
System.out.println(arr[0]);[I@3fa5ac
System.out.println(arr[1]); [I@95cfbe
System.out.println(arr[2]);[I@179dce4
说明arr[0]在二维数组中获取的不是数组中的元素,而是二维数组中第一个数组的地址
**那如何获取二维数组中的元素呢?
二维数组名配合索引可以获取到每个一维数组
每一个一维数组配合索引名可以获取到数组中的元素
*假如我有一个二维数组:arr
*我要从中获取一维数组:arr[索引]
*我要从中获取二维数组中的元素:arr[索引][索引]
System.out.println(arr[0][0]);
解释:在二维数组中的获取第一个数组中第一个元素
System.out.println();输出内容,并换行
System.out.print();只输出内容,不换行
定义格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2....)
方法体;
return返回值;
格式解释:
A.修饰符:目前记住 public static
B.返回值类型 用于限定返回值的数据类型
C.方法名 为了方便我们使用方法的名字
D.参数类型 用于限定调用方法时传入的数据的变量
E.参数名 用于接收调用方法时传入的熟路的变量
F.方法体 完成功能的代码块
G.return 结束方法,并且把返回值带给调用者
写一个方法有两个明确:
A.返回值类型 明确功能结果的数据类型
B.参数类型 明确有几个参数,以及参数的额数据类型
方法中void的使用;
没有明确的返回值的时候使用,那么该方法的返回值类型就是;
而且只能单独输出void
方法返回值如果是void类型时,如果方法体中没有书写return时.系统会自动帮我们添加一个return;
方法的重载:在同一个类中出现方法名相同,类型不同的方法
特点:
方法名相同
参数列表不同
个数不同.类型不同.顺序不同
与返回值无关
方法的参数如果是基本数据类型,形式参数的改变不影响实际参数
实际参数.实际参与运算的数据
形式参数:用于接收实际参数的变量
如果参数是引用数据类型,形式参数的改变会直接影响实际参数的值的改变(因为两个参数的地址值相同,例如引用数据类型为数组)
断点调试的作用:
A.查看程序的执行流程
B.调试程序
断点:其实就是一个标记
在哪里加断点?
那你不会加哪里
如何加断点:
在代码区域的左边双击即可
如何运行加断点的程序呢?
代码区域----右键-----Debug As----java Application
弹出一个框框让我们选择是否进入debug视图,我们选择YES,并且把记住的那个框框也选上
如何让程序往下执行呢?
F6;
看那些区域呢?(f11)
代码区域:看程序的执行流程
Debug区域:看程序的执行流程
Variables:看变量的变化
Console:看程序的输入和输出
如何去掉断点呢?
A.把加断点的动作在来一遍(在次双击)
B.在Debug视图中找到Breakpoints,选中要删除的断点,点击双X即可
F5:进入方法
F6:一步步执行
F7:在进入方法中,在次返回该方法
|
|