目录
一、程序:
什么是程序:计算机执行某些操作或解决问题而编写的有序指令的集合。
二、java语言
1、Java语言的特性
1)java语言是面向对象的
2).java语言是健壮的(加法的强类型机制,垃圾自动回收处理)
3)JAVA是解释型的
解释型语言:编译后的代码不能直接被机器执行【Java;PHP】
编译型语言:编译后的代码能直接被机器执行【C;C++】
2、Java运行机制
1)具有指令疾病使用不同的存储区域负责执行指令数据管理,内存寄存器包含在jdk中
2)对不同的平台有不同的JVM
3)屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
JVM(java虚拟机):对JAVA语言进行解释和执行
3、JDK——加法开发工具包
JRE——java运行环境
(jvm + Java的核心库)
Java开发工具(在bin目录下面)
三、基本代码
1、main方法
public class 类名(){
main方法//main方法是程序执行的入口
}
2、转义字符
\t | \n | \\ | \" | \ ' | \r |
空格 | 换行 | 一个 \ | 一个 " | 一个 ' | 一个回车 |
2、基本注释
1)单行注释 //
2)多行注释 /**/
3)文档注释——注释的内容可以被JDK提供的工具Javadoc所解析,生成一页网页文件或体现的该程序说明。
四、DOS命令
1、基本流程
接受命令——解析命令——执行命令
2、相对路径和绝对路径
相对路径:从当前目录开始定位形成路径
从text出发: ..\..\abc2\text2【..\可以返回上一级目录】
绝对路径:从顶级目录开始定位形成路径
3、常用DOS命令
DIR | 显示当前目录的内容 |
cd | 切盘(切到C:或D:) |
cd\ | 切换到根目录 |
tree d:\abc | 查看D盘abc所有目录 |
cls | 清屏 |
exit | 退出DOS |
4、变量
变量是程序的基本组成单位
【类型、名称、值】
变量表示内存中的一个存储区域(不同的变量,类型不同,占用的空间大小不同)
五、数据类型
数据类型基本——三类八种
整型 | int | short | long | byte(-128_127) |
泛点/小数 | float | double | ||
非数值 | char | boolean |
boolean类型——结果只能输出 TRUE或FALSE【一般用于逻辑运算】
char——字符编码表(分类)
ASCII(一个字母用一个字符表示,共128个字符)——美国多用
unicode 码(固定大小的编码,使用两个字节表示)——存储空间浪费
UTF-8 (大小可变的编码,字母占用一个字节,汉字占用3个字节)——使用最多
gbk (字母1个字节,汉字占用2个字节)
引用数据类型
- 类(class)——String
- 接口(interface)
- 数组([])
2、类型转换
1) 自动类型转换——JAVA在进行赋值式精度小的会自动转化为精度大的类型
【short、byte 和 char 之间不会相互转换,但可相互运算,会自动转化为int】
2)强制类型转换—
将容量大的数据类型转换为容量小的数据类型,加上强制转换符()但可能造成精确度降低。
强制转换符只对最近的数值有效(使用小括号提高优先等级)
3、基本数据类型和String形相互转换
1)把基本数据类型转化成String
String = 基本数据类型 + " ";
【要确保String类型能转换成有效数据(字母转不成数据)】
2 把字符串转化为字符
调用基本数据类型相对的包装类的相应方法,得到基本数据类型
String a ="123";
Int num = Intager.parseInt.(a);
char num = char.parseChar.(a);
六、运算符
运算符是一种特殊符号,用于表示数据的运算、赋值和比较。
1、算术运算符:
对数值类型的变量进行运算,在java程序中使用最多
【+;-;*;/;%(取余);++(自增);--(自减)】
a%b = a - a/b *b;
++a: 先自增后赋值
a++ :先赋值后自增
2、关系运算符/比较运算符
关系运算符组成的表达式叫做关系表达式;
关系运算符的结果都为Boolean类型——结果为TRUE或FALSE;【常用 if 或循环结构的条件中】
【==;!=;<;>;<=;>=】
3、逻辑运算符
用于连接多个条件(关系表达式)
短路与 && :两个条件为真即为true,否则为false
逻辑与 & :两个条件为真即为true,否则为false
短路或 || :第一个条件为真,则结果为true。不执行条件2(效率高)
逻辑或 | :两个条件都执行,其中一个为真则为true(效率低)
异或 :一真一假结果为true,同真同假为false
4、赋值运算符
将某个运算后的值赋给变量
byte b = 1;
b ++ ; // b= (byte)(b+1)
b += 2; //b =(byte)(b+2
b = b+2; //int b = b+2
5、三元运算符
//基本语法
条件表达式 ? 表达式1:表达式2;
//等价于
if(){
表达式1;
}else{
表达式2;
}
如果运算结果为true,运算结果为表达式1;如果运算结果为flase,运算结果为表达式1。
七、控制语句
1、 流程控制——在程序中,程序运行的流程控制决定程序是如何执行的
2、顺序控制——程序从上到下术藏运行,中间无判断和跳转(先定义后执行)
3、分支控制——让程序有选择的执行
(1)if—else
//单分支
if(条件表达式){
代码块(可执行多条语句);
} //只有一条语句时{}可以省略
//双分支
if(条件表达式){
代码块一;
}else{
代码块二;
}
//多分支
if(条件表达式){
代码块一;
}else if{
代码块二;
}else if{
代码块三;
} ...{
}else {
代码块;
}
嵌套分支【在一个分支结构中完整嵌套了另一个完整的分支结构,里面的分支称为内分支,外面的分支称为外分支】
if(条件表达式){
if(条件表达式){
//if-else
}else{
}
}
(2)switch分支结构
seitch(条件表达式){
case 1:
语句1;
break;
case 2:
语句2;
break;
case 3:
语句3;
break;
...
default: //都不匹配,默认值行default
default语句块;
}
表达式数据类型和case后的常量类型一致,或可相互比较或转化的类型
表达式中的返回值必须为【byte , short , char , int , enum[枚举] , String】
表达式中的值必须为常量
case语句—子句中的值必须为常量而不是变量
【接收字符】
Scanner input = new Scanner(System.in);
char 变量名 = input.next().charAt(0);//这个0是指得到输入字符串中的第一个数
4、循环语句
(1)for循环
for(初始化变量;条件;迭代){
循环操作;
}
循环条件返回的值必须为一个布尔表达式;
循环性初始值可以有多条初始化语句,但要求类型一样,且中间用逗号隔开
for(int 1 = 0,int j = 0;i <= 10; i++ , j++){
System.out.println("i="+i+"+j=" +j);
}
(2)while循环
while(循环条件){
循环体(语句); //while循环是先判断在执行
迭代;
}
(3)do—while循环
do{
循环体(语句1);//do-while是先执行再迭代
迭代;
}while;
多重循环:将一个循环放在另一个循环体内,形成嵌套循环
嵌套循环就是把内层循环当成外层循环的循环体,只有内层条件为false时,才会跳出内层循环,开始下一次循环。
//九九乘法表
public class nineNine {
public static void main(String[] args) {
for(int i =1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(i+"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
随机生成——math.random
返回的是0.0——1.0中随机一个数
5、跳转控制语句
(1)break【终止循环】
break语句出现在各层嵌套语句块中时,可通过标签指明要终止的是那一层语句。
(2)continue
用于结束本次循环,继续下次循环
(3)return
使用在方法中,表示跳出所在方法【用在main函数中则结束程序】
字符中equals的使用
" ".equals.(变量);
八、数组、排序和查找
1、数组
数组——可以存放多个同一类型的数据,数组是引用类型。
数组可以通过for循环遍历
(1)数组定义
基本数据类型[] 数组名 = new 数据类型[大小]
通过变量名的【下标】访问数组的元素,下标是从0开始编写的。
double arr[] = new double[5];
Scanner input = new Scanner(System.in);
for(int i = 0;i< arr.length;i++ ){
System.out.println("请输入第"+i+"个元素的值");
arr[i] =input.nextDouble();
}
for(int i = 0; i < arr.length;i++){
System.out.println(arr[i]);
}
先声明再分配
数据类型[] 数组名;
数组名 = new 数据类型[];
数组创建后,若没有赋值,则数组有默认值【boolea——false;String——null】
(2) 数组的赋值机制——在默认条件下是引用传递,赋的值是地址
数据拷贝——复制一个arr1的空间【需要重新new一个】
int arr2[] =new int[arr1.length];
(3)数据反转
for(int i =0;i<arr.length/2;i++){
int temp =arr[arr.length-i-1];
arr[arr.length-i-1] =arr[i];
arr[i]=temp;
}
//逆序反转
for(int i=arr.length-1,int j =0;i>=0;i--,j++){
arr[j] = arr[i];
}
arr = arr2;
(4) 数据添加
定义一个新数组 int[] arrNew =new int[arr,length+1];
再将arr元素拷贝到arrNew数组,在添加值
Scanner input = new Scanner(System.in);
do{
double arrNew[] = new double[arr.length+1];
for(int i = 0;i< arr.length;i++ ){
arrNew[i] = arr[i];
}
System.out.println("请输入添加的元素");
int addNum = input.nextInt();
arrNew[arrNew.length-1]=addNum;
arr = arrNew;
for(int i = 0; i < arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("是否继续添加?");
char answer = input.next().charAt(0);
if(answer == 'n'){
break;
}
}while(true);
数据缩减同理
(5)多维数组
二维数组:从定义形式上看 int [][]——二维数组的元素是一维数组
动态初始化
类型[][] 数组名 = new 类型[大小][大小];
//第二种
类型[][] 数组名; //先声明
数组名 = new 类型[大小][大小]; //再定义
列数不确定
int[][] arr = new int[3][]; //j是空的,还未开发数据空间
for(int i= 0;i<arr.length;i++){
arr[i] = new int[i+1]; //给每个元素开辟空间
for(int j= 0;i<arr[i].length;j++){
arr[i][j] = i+1;
}
}
二维数组是由多个一维数组组成的,它的各个一维长度可以不同
遍历二维数组
for(int i= 0;i<arr.length;i++){//遍历每个元素
for(int j= 0;i<arr[i].length;j++){//遍历元素中的每个值
System.out.println(arr[i][j]);
}
}