三天回顾Java——零基础速成实战
- 第一天 初识Java入门基础(上)
- 1、我们为什么学Java
- 1.1、Java是什么?
- 1.2、Java主要特性
- 2、关于Java那些事
- 3、Java基础
- 3.1、标识符和关键字
- 3.2、数据类型
- 3.2.1基本类型(primitive type)
- 3.3、什么是字节
- 3.4、类型转换
- 3.5、变量、常量、作用域、命名规范
- 3.6、运算符
- 3.6.1、自增自减运算符
- 3.6.2、幂运算 2^3 2*2*2=8
- 3.6.3、逻辑运算符
- 3.6.4、位运算
- 3.6.5、三元运算符
- 3.7、包机制
- 3.7.1、包的语法格式:
- 3.8、JavaDoc生成文档
- 3.9、用户输入Scanner
- 3.10、流程控制方法
- 3.11、Java方法
- 3.11.1、方法的定义
- 3.11.1、方法的调用
- 3.11.1、方法的重载
- 3.11.1、递归
- 3.12、Java数组
- 3.12.1、数组的定义
- 3.12.2、数组的声明创建
- 3.12.3、数组的三种初始化
- 3.12.4、数组的基本特点
- 3.12.5、数组的使用
- 3.12.6、Arrays类
- 》》》下一节
第一天 初识Java入门基础(上)
1、我们为什么学Java
1.1、Java是什么?
Java 旨在竭尽所能为最广泛的计算平台开发可移植的高性能应用程序。
通过使应用程序在异构环境之间可用,企业可以提供更多的服务,提高最终用户生产力并加强沟通与协作,从而显著降低企业和消费类应用程序的拥有成本。
Java 是开发人员的无价之宝,使他们可以:
- 在一个平台上编写软件,然后即可在几乎所有其他平台上运行
- 创建可在 Web 浏览器中运行并可访问可用 Web 服务的程序
- 开发适用于在线论坛、存储、投票、HTML 格式处理以及其他用途的服务器端应用程序
- 将采用 Java 语言的应用程序或服务组合在一起,构成高度定制的应用程序或服务
- 为移动电话、远程处理器、微控制器、无线模块、传感器、网关、消费产品及几乎其他任何电子设备编写强大而高效的应用程序
1.2、Java主要特性
简单性
面对对象
可移植性
高性能
分布式
多态性
多线程
安全性
健壮性
-
Java 语言是简单的:
-Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。 -
Java 语言是面向对象的:
Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。 -
Java语言是分布式的:
Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。 -
Java 语言是健壮的:
Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。 -
Java语言是安全的:
Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 -
Java 语言是体系结构中立的:
Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 -
Java 语言是可移植的:
这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。 -
Java 语言是解释型的:
如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。 -
Java 是高性能的:
与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。 -
Java 语言是多线程的:
在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。 -
Java 语言是动态的:
Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
2、关于Java那些事
宣言:一次编写,到处运行
- Write Once,Run Anywhere
Java三大版本
JavaSE: 标准版 (桌面程序,控制台开发…)
JavaME: 嵌入式开发 (手机,小家电…),已经凉了
JavaEE: 企业级开发 (Web端,服务端开发…),JavaSE为基础
JDK JRE JVM
JDK:Java Development Kit (Java开发者工具,包括 JRE,JVM)
JRE:Java Runtime Environment (Java运行时环境)
JVM:Java Virtual Machine (Java虚拟机,跨平台核心)
JDK JRE JVM之间的逻辑关系
安装开发环境
## 卸载JDk
删除Java安装目录
删除环境变量JAVA_HOME
删除path下关于JAVA的目录
Java -version
## 安装JDK
浏览器搜索JDK8,下载电脑对应的版本,
如64位操作系统下载 jdk-8u281-windows-x64.exe
双击安装JDK
配置环境变量
我的电脑-》属性-》系统高级设置-》环境变量
系统变量 新建–> JAVA_HOME 输入对应的jdk安装路径
path变量–>% JAVA_HOME%\bin
测试是否成功 cmd–>Java -version
Java注释:
1.单行注释:用于注释一行内容
快捷键:CTRL+/ (IDEA 环境,下同)
2.多行注释:用于一次性给多行代码注释,也可以使用单行注释只不过要选中多行
快捷键:CTRL+shift+/
3.文本注释
快捷键:/**+回车
3、Java基础
3.1、标识符和关键字
-
Java 所有的组成部分都需要名字。类名、变量名、方法名都被称为标识符
关键字 -
标识符注意点
- 所有标识符都应该以 字母、$(美元符)、_(下划线) 开头
- 首字母之后可以是 字母、$、_ 或数字任何字符组合
- 关键字不能作为变量名或方法名
- 标识符大小写敏感
- 可以用中文命名,但不建议使用
- 当然 ,如果可以,请放弃拼音式命名
3.2、数据类型
- 强类型语言
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
-
弱类型语言:JavaScript,Python
Java的数据类型分为两大类
3.2.1基本类型(primitive type)
//整数
int num1 = 10; //最常用,只要别超过21亿(2^31-1)
byte num2 = 20; //-128~127
short num3 = 30;
long num4 = 30L; //long类型数字后面要加个L
//小数:浮点数
float num5 = 50.1F; //float类型数字后面要加个F
double num6 = 3.141592653589793238;
//特殊类型(大十进制数:)
1.public BigDecimal(double val) 将double表示形式转换为BigDecimal *不建议使用
2.public BigDecimal(int val) 将int表示形式转换成BigDecimal
3.public BigDecimal(String val) 将String表示形式转换成BigDecimal
//字符
char name = '国';
//字符串, String不是关键字,是类
//String namea = "薛之谦";
//布尔值:是非
boolean flag = true
float double BigDecimal 之间的区别
- double是双精度浮点数,内存占8个字节,有效数字16位,范围从10-308到10308 和 -10-308到-10-308,有效小数位15位
- float是单精度浮点数,内存占4个字节,有效数字8位,范围从10-38到1038 和 -1038到-10-38,有效小数位6-7位
- CPU处理float的速度比处理double快。double的精度高,double消耗内存是float的两倍。
- 小数默认是double类型,用float时需要进行强转,或者在小数后加上f。
输出:
3.3、什么是字节
-
位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数
-
字节(byte, B):是计算机中 数据处理 的基本单位,习惯上用大写B表示
1B(byte) = 8bit,1字节等于8位 -
字符:指计算机中使用的字母,数字,字和符号
1bit表示1位
1Byte表示一个字节 1B=8b
1024B = 1KB, 1024KB = 1M, 1024M = 1G
3.4、类型转换
-
由于Java是强类型语言,所以不同类型的数据先转化位同一类型,再进行运算。
-
强制转换,(类型)变量名,容量由高到低
-
自动转换,容量由低到高
-
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容器转换到低容量的时候,强制转换
4.可能存在内存溢出,或者精度问题
3.5、变量、常量、作用域、命名规范
1. 变量
- Java是一种强类型语言,每个变量使用前都必须声明其类型
- Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域
//数据类型 变量名 = 值;
//可以在同一行使用逗号隔开同多个类型的变量,但是不建议这样使用
- 变量作用域
- 类变量(static):伴随着类的加载而产生,其所有权属于该类
- 实例变量 :伴随着类的加载而产生,其所有权属于该类
- 局部变量 :伴随着类的加载而产生,其所有权属于该类
- 变量的命名规范:
引用于《阿里巴巴Java开发手册》
- 常量
- 常量:
其值经初始化后,在程序运行过程不允许被更改。
//修饰符 不存在先后顺序,static可以写final后面 常量一般用大写字符
3.6、运算符
3.6.1、自增自减运算符
int a = 3;
int b = a++; //b=a,a=a+1 先赋值再自增 即b=a a=a+1
int c = ++a; //a=a+1,c=a 先自增再赋值 即a=a+1 c=a
输出:
3.6.2、幂运算 2^3 222=8
double pow = Math.pow(2,3); // (底数,指数)double型
System.out.println(pow); //8.0
3.6.3、逻辑运算符
第一个值为false,后面就不进行判定了
&& 逻辑与运算:两个变量都为真,结果为true
第一个值为true,后面就不进行判定了
|| 逻辑与运算:两个变量有一个为真,结果为true
! 取反,真变为假,假变为真
3.6.4、位运算
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。
因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。
3.6.5、三元运算符
x ? y : z
//如果x为真,则结果为y,否则为z
输出:
3.7、包机制
3.7.1、包的语法格式:
- package Base_Java;
- 一般利用公司域名倒置作为包名;com.example.www
import java.util.*; //通配符* 导入包下所有的类
3.8、JavaDoc生成文档
-
javadoc命令是用来生成自己API文档的
-
参数信息
API文档:
-
打开某个类所在文件夹下的cmd命令行
输入:javadoc -encoding UTF-8 -charset UTF-8 Doc(类名).java
会自动生成该类有关的API文档,查看文件夹发现多了一些文件
打开 index.html(首页)查看文档注释
3.9、用户输入Scanner
- 通过Scanner类可以获取用户的输入。
Scanner s = new Scanner(System.in);
- 通过Scanner类的 next()与 nextLine()方法获取用户的字符串,
- 一般用hasNext()与hasNextLine()判断是否还有输入的数据。
3.10、流程控制方法
Java的基本结构就是顺序结构,除非特别指明,否则就按语句一条一条执行。
- 顺序结构
- if单选择结构 if( )
- if双选择结构 if( ){ }else{ }
- if多选择结构 if( ){ }else if{ }else{}
- 嵌套的if结构 if( ){ if( ) }
- switch多选择结构
注意:再JDK新特性中已经出现了新写法
char grade = 'C'; //JDK新特性 可以是字符串(字符本质还是数字)
switch (grade){
case 'A':
System.out.println("优秀");
break; //可选,跳出当前结构
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("合格");
break;
default: //默认,以上值没匹配到
System.out.println("不及格");
break;
}
- 循环结构
-
- while循环
//计算1+2+3+...+100
int i=0;
int sum=0;
while(i<100){
i++;
sum+=i;
}
System.out.println(sum); //5050
-
- do…while循环
//先执行后判断,至少执行一次
do{
i++;
sum+=i;
}while(i<100) //跟上面效果一样
-
- for循环
//(初始化;条件判断;迭代)
for(int i=0;i<100;i++){
i++;
sum+=i;
}
-
- foreach遍历
int [] numbers = {10,20,30,40,50}; //定义一个数组
for (int x:numbers){
System.out.println(x); //遍历数组的元素 10 20 30 40 50
}
- - break & continue
- break 强行退出循环,不进行下一次循环条件判断。
- continue 终止本次循环过程,跳过剩余语句,之后进行下一次循环条件判断。
3.11、Java方法
3.11.1、方法的定义
Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段。
方法包含一个方法头和一个方法体。
- 修饰符:定义了方法的访问类型
- 返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法没有返回值,则returnValueType为关键字void。
- 方法名:是方法的实际名称
- 参数类型:参数列表是指方法的参数类型、顺序和参数个数。方法可以不包含任何参数。
- 形参:在方法被调用时用于接收外界输入的数据。
- 实参:调用方法时实际传给方法的数据。
- 方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名,...){
方法体...
return 返回值;
}
3.11.1、方法的调用
调用方法:对象名.方法名(实参列表)。
- 当方法返回一个值的时候,方法调用通常被当成一个值。
int larger = max(30,40);
- 如果方法返回值是void,方法调用一定是一条语句。
扩展:值传递和引用传递 ( Java都是值传递)
3.11.1、方法的重载
重载是在一个类中,有相同的方法名,参数列表不同的方法。
方法重载的规则:
- 方法名称必须相同
- 参数列表必须不同(个数、参数类型、或排序不同)
- 返回类型可以相同也可以不相同
- 仅仅返回类型不同不足以成为方法的重载
3.11.1、递归
-
递归就是:A方法调用A方法,自己调用自己!
-
递归的能力在于用有限的语句来定义对象的无限集合。
阶乘 n!
public static int f(int n){
if(n==1) return 1;
return n*f(n-1); //递归:调用自身
}
3.12、Java数组
3.12.1、数组的定义
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干数据,按照一定先后次序排序组合而成
- 其中,每一个数据称作一个数组元素,每个数组元素可以通过下标访问它们
3.12.2、数组的声明创建
- 首先必须声明数组变量,才能在程序中使用数组。
dataType[] arrayRefVar = new dataType[arraySize]; //int[] nums=new int[10]
- 数组的元素是通过索引访问的,数组索引从0开始
获取数组长度:arrays.length
int[] nums; //1.声明一个数组
nums = new int[3]; //2.创建一个数组
//3.给数组元素赋值
nums[0]=1;
nums[1]=2;
nums[2]=3;
for (int num : nums) { //打印数组所有元素
System.out.println(num);
}
3.12.3、数组的三种初始化
- 静态初始化
//静态初始化:创建+赋值
int[] a={1,2,3};
Man[] mans={new Man(1,1),new Man(2,2)}
- 动态初始化
//包含默认初始化
int[] a=new int[2]; //默认值为0
a[0]=1;
a[1]=2;
- 默认初始化
数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
3.12.4、数组的基本特点
-
其长度是确定的,数组一旦被创建,它的大小就是不可改变的。
-
其元素必须是相同类型,不允许出现混合类型。
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
-
数组变量属于引用类型,数组也可以看作对象,其中每个元素相当于该对象的成员变量。
-
数组本身就是对象,Java中对象是在堆中的,因此数组本身是在堆中的。
3.12.5、数组的使用
- For-Each循环遍历
int[] arrays = {1,2,3,4,5};
for (int array : arrays) {
System.out.println(array);
}
- 数组作方法入参
//打印数组元素
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
- 数组作返回值
//反转数组
int[] result = new int[arrays.length];
//反转的操作
for (int i = 0; i < arrays.length; i++) {
result[i] = arrays[arrays.length-i-1];
}
return result;
- 多维数组
多维数组可以看成数组的数组,比如二维数组就是一个特殊的数组,其每一个元素都是一个一维数组。
3.12.6、Arrays类
-
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们使用,但API提供了一个工具类Arrays供我们使用。
Array类中的方法都是static修饰的静态方法,使用时直接使用类名进行调用,可以不用对象调用。 -
常用功能
给数组赋值:fill方法。
排序:sort方法,升序。
比较数组:equals方法比较数组中元素值是否相等。
查找数组元素:binarySearch对排序好的数组进行二分查找法操作。 -
冒泡排序
//冒泡排序
//1.比较数组中两个相邻的元素,如果第一个数大于第二个数,交换它们位置
//2.每一次比较,都会产生一个最大或最小的数字(升序为最大数)
//3.下一轮则可以少一次排序
//4.依次循环,直到结束
4.稀疏数组
1.有效值的个数
2.创建一个稀疏数组
3.遍历二维数组,将有效值存放到稀疏数组
4.输出稀疏数组
》》》下一节
:第二天 初识Java入门基础(中)
更多推荐
Java——零基础速成学习
发布评论