·JAVA概述
1.Java的历史
Oak(橡树)语言,由Green开发团队开发,主要用于微型嵌入式设备编程,第一次提出了开源协议
,Java之父 詹姆斯.高斯林
经历过Sun公司接手之后,最终由Oracle收购,1995年语言更名为Java
,正式发布JDK1.0
1996年 Java(此时JDK1.2)应对发展需求,分为三个重要方向:
-
J2SE
: Java标准语法(这是学习Java开发体系的必备基础) -
J2ME
: 微型嵌入式领域的编程(例如:塞班系统应用,但后来并没有普及) -
J2EE
: 企业级开发(使用Java语言开发服务器)
2006年 JDK1.6 开源所有的代码
(J2SE–>Java SE,J2ME–>Java ME,J2EE–>Java EE)
·JDK
JDK
JDK 全称是 Java Development Kits 的缩写,翻译过来为Java开发工具包
在JDK中有运行.java文件的虚拟机(解释器)
知识点:
1、java的源文件 开发文件是以什么方式结尾 .java
2、虚拟机 解析.java文件
我们接下来一一解答以下问题:
1、什么是虚拟机
指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
比如:我们在电脑中用的手机模拟器,就是一个由软件模拟的虚拟机
在Java中的虚拟机,是指的专门为了解析.java文件存在的一种软件
虚拟机,英文为 Virtual Machine,而Java虚拟机被人成为JVM(即Java Virtual Machine)
2、JDK中除了虚拟机还有哪些内容
JRE: Java Runtime Envirment (Java运行时环境 ,运行.java文件的核心内容)
JDK 包含JRE,JRE中有JVM。
3、虚拟机运行.java文件的原理
Java11 之前
java命令:将.java文件编译成.class文件(这里的.class为字节码文件,机器是无法识别的)
javac命令:将.class文件解释成对应的二进制命令。
Java11 后
java命令:将.java文件直接解释成对应的二进制命令
所以我们既可以说Java是一门编译解释语言,也可以说是一门解释语言。
(区别与编译语言)
4、什么是解释型语言
首先要了解两个概念:编译语言、解释语言
1、编译语言是指定文件,编译到指定位置,生成指定的二进制文件,特点:效率高、速度快 (C语言)
2、解释语言是指定文件,解释到任何位置,生成指定的二进制文件,特点:跨平台性好
·Java数据类型
Java数据类型:1、基本数据类型 2、引用数据类型
基本数据类型
- 数值类型:byte short int long float double
- 字符类型:char
- 布尔值类型:boolean (true,false)
基本类型
byte 1字节 -128~127 -2^7 ~2^7-1
short 2字节 -32768~32767 -215~27-15
int 4字节 -20亿~20亿 10位数字
long 8字节
float 4字节
double 8字节
引用类型
数组
类
接口
·数据类型转换
自动类型转换
小字节的数据可以直接保存到大字节的变量中
byte--short--int--long--float--double
char和整型可以互相保存
强制类型转换
将大字节变量中的数据保存到小字节变量中,会有数据溢出的可能
数据类型 变量 = (目标类型) 数值/变量;
int i=128;
byte b=(byte)i;
//b的值为-128
·循环
while循环
while(循环条件){
循环体;
}
do-while循环
do{
循环体;
}while(循环条件);
注意:
while循环先判断后执行,有可能一次都不执行。
do-while先执行一次后再判断,至少执行一次。
for循环
/for循环
//for循环格式 for(初始化内容;结束循环条件;变化方式){...}
//初始化内容:int i = 0
//结束循环条件: i < 5 (布尔表达式)
//变化方式: i++
循环嵌套
//打印乘法表
for (int i = 1; i <= 9; i++) {
for(int k=1;k<=i-1;k++){
System.out.print("\t");
}
for (int j = 1; j <= 10-i; j++) {
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
// 鸡兔同笼 头35 脚94
//穷举法
int ji, tu;
for (ji = 0; ji <= 35; ji++) {
for (tu = 0; tu <= 35; tu++) {
if (ji + tu == 35 && 4 * tu + 2 * ji == 94) {
System.out.println(ji + "--" + tu);
}
}
}
//打印10000以内完数 完美数 6 = 1+2+3 28 = 1+2+4+7+14
//一个数如果他的非自身因子和等于它本身 因子:能被它整除的数
//判断一个数是否为完数 28
for (int num = 1; num < 10000;num++) {
//每个数的因子和
int sum = 0;
//判断该数的因子
for (int i = 1; i < num; i++) {
if (num % i == 0) {
//得到因子后累加
sum += i;
}
}
//判断因子和与这个数是否相同
if(sum==num){
System.out.println(num+"是完数");
}
}
一维数组
一组类型相同的数据的集合。
-
只能保存同一种类型。
-
长度不可变
-
无法得知数组中的元素数量
-
数组定义后,每个位置上都有默认值
数组默认值 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0.0 |
boolean | false |
引用类型 | null |
定义数组
数据类型[] 数组名;初始化数组
初始化数组
数组名 = new 数据类型[数组大小]
定义数组的同时初始化
数据类型[] 数组名 = new 数据类型[数组大小];
数据类型[] 数组名 = new 数据类型[]{元素1,元素2...};
数据类型[] 数组名 = {元素1,元素2...};
读取或赋值数组中的元素
//给数组中某个索引赋值
数组名[下标]=值;
//读取数组中某个索引的元素
数据类型 变量名 = 数组名[下标];
遍历数组中的所有元素
for(int i=0;i<list.length;i++){
System.out.println( list[i]);
}
//增强for循环
for(数据类型 变量名 : 遍历的数组或集合){
}
for(int i:list){
System.out.println( i);
}
二维数组
数组中保存的是数组,实际就是表格
数据类型[][] 数组名 = new 数据类型[行数量][列数量];
例如:杨辉三角
import java.util.Arrays;
import java.util.Scanner;
public class Work02 {
public static void main(String[] args) {
Scanner scan =new Scanner(System.in);
System.out.println("请输入你要输入的杨辉三角的行数:");
int n =scan.nextInt();
//如果要生成n行杨辉三角,其实就是一个[n][2*n+1]的二维数组
int[][] a = new int[n][2*n+1];
//令第一行为一从第二行开始的数字是该数字左上角与右上角数字的和;a[i][j]=a[i-1][j-1]+a[i-1][j+1]
a[0][n]=1;
for (int i = 1; i < a.length; i++) {
for (int j = 1; j <a[i].length-1 ; j++) {
a[i][j]=a[i-1][j-1]+a[i-1][j+1];
}
}
//这里遍历输出数组,其中默认值为0的元素令他为“ ”,
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length - 1; j++) {
if(a[i][j]!=0){
//发现空格后无法对整齐加入\t
System.out.print(a[i][j]+"\t");
}else {
System.out.print(" \t");
}
}
System.out.println();
}
}
}