java基础
2020/9/2 17:22:23
计算机常识
硬件
CPU、内存(临时存储数据,例如:变量...)、硬盘(永久存储数据,例如:记事本文件、mp4影音文件...)、
主板、显卡、电源、风扇、鼠标、键盘...
软件
系统软件 --> windows家族,mac家族、Unix、Linux、Dos(字符命令)、安卓、苹果、塞班、其他
应用软件 --> wps、暴风影音、...
Java 常识
Java SE -- 基础、可实现桌面程序开发
Java EE -- 企业及开发,可实现互联开发
Java ME -- 移动端开发(被安卓替换了)
常见名词
JDK -- java的开发(编译)环境,官网下载安装
JRE -- java的运行(执行)环境,安装jdk后即拥有。
JVM -- java虚拟机,安装jdk后即拥有
API -- 官网文档
IDE -- 集成开发环境,例如 eclipse、IDEA、nbncre
java环境安装与配置
(1)去官网下载,JDK-1.8.162
(2)安装JDK
(3)配置环境变量(告知dos你的jdk在哪里存放)
找打jdk的bin路基:C:Program FilesJavajdk1.8.0_162in
我的电脑--属性--高级系统设置--高级--环境变量--Path,
编辑path ,值首字符前追加,C:Program FilesJavajdk1.8.0_162in; (注意以分号做结束)
测试环境
开始-- 运行-- cmd
javac -version
成功可看到:javac 1.8.0_162
java的第1个小程序
编写java源码,打印Hello World
第1步:创建记事本,修改文件名HelloWorld ,修改扩展名.java
第2步:创建HelloWorld类
public class 自定义类名{
}
注意:
公共类的类名称必须与所在文件的文件名一致(区分大小写)
1个源文件中只能有1个公共类,1个源文件中可以有多个非公共类。
第3步:编写main方法
public class 自定义类名{
public static void main(String[] args){
}
}
第4步:下达命令,打印Hello World
public class 自定义类名{
public static void main(String[] args){
System.out.println("原样输出字符");
}
}
注意:
java语句命令以;分号做结束
英文名词解析
public公共的 class类 static静态的
void无返回的 main主方法(入口) String字符串数据类型
System系统的 out输出端 println带有换行的打印方法
java是如何实现跨平台
Java字节码可以通过JVM翻译为具体平台能够执行的机器指令。
由于Sun定义了JVM规范,而且不同的操作系统大多提供了JVM实现,
才使得相同的一个字节码文件可以在不同的系统上运行,
从而使Java赢得了“一次编译,到处使用”的美名。
执行源码,需要先javac命令编译,产生字节码后,通过java命令执行
编译命令
javac 文件名.java
此时如源文件正确被编译后生产 文件名.class 的字节码
执行java程序
java 文件名/公共类的类名
变量声明与赋值
Java强语言规则,变量必须先声明后使用。
语法:
数据类型 变量名 = 初始值 ;
数据类型 变量名1 = 初始值 , 变量名2 = 初始值 ,... , 变量名N = 初始值 ;
int num1 = 10;
int num2,num3, num4;
标识符命名规则
1.变量名由大写字母A~Z、小写字母a~z、数字0~9、_和$符组成
2.变量名不能以数字做开头
3.变量名应避免与关键字重名
4.变量名要见名知意
5.变量名支持中文,但不推荐使用
6.变量名编写习惯第一个单词首字母小写,其后每个单词首字母大写。
7.类名称与变量名命名规范雷同,但是类名称每个单词的首字母都大写。
int num; float n1; int 数1; int $sys_n1; int _x;
int system;
变量的输出
语法
System.out.println(“原样字符”+变量名+“原样字符”+... +变量名+...);
举个例子:
设两个整数变量存储1和2,输出2数之和,格式“1+2=3”
int a=1,b=2;
int sum = a + b;
System.out.println( a+ “+” +b+ “=” +sum );
变量的输入
步骤 | 含义 | 代码 |
---|---|---|
1 | 导入类型 | import java.util.Scanner; |
2 | 创建Scanner输入类型对象 | Scanner scan = new Scanner(System.in); |
3 | 调用方法输入数据 | 输入整数:scan.nextInt(); 输入单精度小数:scan.nextFloat(); 输入双精度小数:scan.nextDouble(); 输入字符串:scan.next(); scan.nextLine(); |
基础数据类型
类型 | 字节 | 位 | 包装类型 |
---|---|---|---|
byte | 1 | 8 | Byte |
int | 4 | 32 | Integer |
long | 8 | 64 | Long |
short | 2 | 16 | Short |
float | 4 | 32 | Float |
double | 8 | 64 | Double |
char | 2 | 16 | Character |
boolean | 1 | 8 | Boolean |
数据类型自动转换: 小数据类型赋值给大数据类型,整数赋值给小数
数据类型的强制转换: 大数据类型赋值给小数据类型,小数赋值给整数
小数据类型 变量名 = (小数据类型)大变量;
运算符与表达式
赋值运算符 =
等号后的赋值给等号前的,注意在Java中一个等号表示赋值运算,两个等号表示比较是否相等。
举个例子:
int a=10,b=20;
int t=a;
数学运算符
+加法 、 -减法、 *乘法、 /除法、 %取余
运算时需要考虑数据类型,
除数 被除数 商
int int int
int double double
double int double
double double double
举个例子:
商 余数
5.0/2 2.5 1.0
5/2.0 2.5 1.0
5/2 a=2 b=1
int a=5/2;
int b=5%2;
连接符
加号+在Java中有两种作用,一种是加法运算,一种是连接符。
当加号两边运算数都是数值型数据时,加号做加法运算。
当加号两边有任意一遍是字符串时,加号做链接操作。
举个例子:
运算数1 | + | 运算数2 | 结果 |
---|---|---|---|
1(int) | + | 2(int) | 3(int) |
"abc"(String) | + | 123(int) | "abc123"(String) |
"a"(String) | + | 123(int) | "a123"(String) |
"123"(int) | + | #(String) | "123#"(String) |
关系运算符
举个例子:
运算符 | 含义 | 表达式 | 结果 |
---|---|---|---|
> | 大于 | 1>2 | false |
>= | 大于等于 | 1>=1 | true |
< | 小于 | 1<2 | true |
<= | 小于等于 | 1/2<=5 | true |
== | 等于 | 4%2==0 | true |
!= | 不等于 | 5%2!=0 | true |
拓展,三目运算符
条件表达式 ? 表达式1 : 表达2
含义:
当条件表达式成立时,执行问号后的表达式1,
当条件表达式不成立时,执行冒号后表达式2
举个栗子:找出两个数a与b中的最大值
public static void main(String[] args){
int a=10,b=20;
int max = a>b?a:b; //当a比b大时max=a. 当a小于等于b时执行max=b;
System.out.println(a + “与” + b + "最大值是"+ max);
}
逻辑运算符
逻辑与(&&): 条件表达式1 && 条件表达式2
当两个条件都成立时返回true
条件1 | && | 条件2 | 结果 |
---|---|---|---|
true | && | true | true |
false | && | true | false |
true | && | false | false |
false | && | false | false |
逻辑或(||): 条件表达式1 || 条件表达式2
当有任意一个条件成立时返回true(由于md语法"||"符号是表格语法无法显示,笔者暂时还未找到解决冲突的方案,暂时用"或"代替)
条件1 | 或 | 条件2 | 结果 |
---|---|---|---|
true | 或 | true | true |
false | 或 | true | true |
true | 或 | false | true |
false | 或 | false | false |
逻辑非(!):
!true == flase
!false == true
判断是否是闰年(经典题目):
年能被4整除并且不能被100整除时,或者年能被400整除
2000年是闰年,2000%400==0
2004年是闰年,2004%4==0 并且 2004%100!=0
public static void main(String[] args){
int year =2004;
String isOk = (year%4==0&&year%100!=0) || (year%400==0) ? "闰年" : "平年" ;
System.out.println( year +”是”+ isOk)
}
自增++与自减--运算符
++ 是自加1运算, -- 是自减1运算
1.public void add(){
int a = 1;
a++;
System.out.println(a); //结果为2
}
2.public void add(){
int a = 1;
++a;
System.out.println(a); //结果为2
}
3.public void add(){
int a = 1;
System.out.println(a++); //结果为1
}
因为++号在后,代码会先输出a的值,然后再执行++的操作
public void add(){
int a = 1;
System.out.println(a++); //结果为1
System.out.println(a); //结果为2
}
4.public void add(){
int a = 1;
System.out.println(++a); //结果为2
}
因为++号在前,代码会执行++的操作,然后再输出a的值
--也是同理
条件结构
单if结构
语法:
if( 条件表达式 ){
.... 语句体M ...;
}
... 语句体Z ...;
语法解析:
当if后()小括号内条件表达式成立返回true时,执行if后{}花括号内语句体M
当if后()小括号内条件表达式不成立时,if后{}花括号内语句体m不执行。
语句体z与条件无关,条件成立与否都执行。
代码示例:找出2个数的最大值
public void comapreAB(){
int a=20,b=10;
int max=0;
//判断a比b大吗?
if( a>=b ){
max=a; //条件成立时max=a
}
else{
max=b; //条件成立时max=b
}
System.out.println(a +“与”+ b +”最大值”+max);
}
for循环
语法,循环规则
语法 | 表达式含义 | 循环执行过程 |
---|---|---|
for( 表达式1; 表达式2; 表达式3 ){ ... 循环体... } |
表达式1: 设置循环条件变量初始值 表达式2:设置循环条件(满足什么条件重复下一次) 表达式3: 循环条件变量值得变更 |
非循环版
public class Demo01{
public static void main(String[] args){
System.out.println(“Java我爱你 1”);
System.out.println(“Java我爱你 2”);
... ...
System.out.println(“Java我爱你 100”);
... ...
System.out.println(“Java我爱你 10000”);
}
}
循环版
public class Demo01{
public static void main(String[] args){
int i ;
for( i=1; i<=10000; i=i+1 i++ ){
System.out.println(“Java我爱你 ”+i)
}
}
}
循环当中的break
break 用于终止循环,一般与条件结构结合使用。
循环当中的continue
continue 用于跳出本次循环,继续下一次循环,一般结合条件结构使用
数组的声明与使用
数组是相同数据类型的多个元素的容器,元素按线性顺序排列。
数组声明的语法
数据类型[] 数组名= new 数据类型[ 元素个数 ];
或
数据类型 数组名[] = new 数据类型[ 元素个数 ];
举个例子 存储5个整数
int[] ns = new int[5];
给数组元素值
数组名[ 下标 ] = 值;
注意:
下标从0开始,到数组元素个数-1终止。
例如,int[] ns=new int[5],有效的数组元素ns[0],ns[1],ns[2],ns[3],ns[4]
无效的数组元素 ns[5]
数组元素的值类型<=数组元素声明的类型
数组元素的输入与输出
1.数组必须先声明后使用
2.数组元素下标从0 开始,到 元素个数-1 终止
输入
int[] ns = new int[ 5 ];
ns[0] = 1;
ns[1] = 1;
ns[2] = 1;
ns[3] = 1;
ns[4] = 1;
输出
for(i=0; i<ns.length; i++ ){
System.out.println("ns["+i+"]=" + ns[i] );
}
数组元素的初始化
声明数组同时赋予初始值,方式1 -- 完整版
数据类型[] 数组名 = new 数据类型[]{值1, 值2, 值3, ... ... , 值N};
例如,声明数组存放10,20,30,40,50这5个整数
int[] ns = new int[]{ 10, 20, 30, 40, 50};
声明数组同时赋予初始值,方式2 -- 简化版
数组类型[] 数组名 = {值1, 值2,值3, ... ... , 值N};
例如:int[] ns = { 10, 20, 30, 40, 50};