Java——零基础速成学习


三天回顾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——零基础速成学习_第1张图片
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之间的逻辑关系
Java——零基础速成学习_第2张图片

安装开发环境

## 卸载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。
    Java——零基础速成学习_第3张图片
    输出:
    Java——零基础速成学习_第4张图片

3.3、什么是字节

  • 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数

  • 字节(byte, B):是计算机中 数据处理 的基本单位,习惯上用大写B表示
    1B(byte) = 8bit,1字节等于8位

  • 字符:指计算机中使用的字母,数字,字和符号

1bit表示11Byte表示一个字节 1B=8b
1024B = 1KB, 1024KB = 1M, 1024M = 1G

3.4、类型转换

  • 由于Java是强类型语言,所以不同类型的数据先转化位同一类型,再进行运算。

    • 强制转换,(类型)变量名,容量由高到低

    • 自动转换,容量由低到高

注意点:


   1.不能对布尔值进行转换
   2.不能把对象类型转换为不相干的类型
   3.在把高容器转换到低容量的时候,强制转换
   4.可能存在内存溢出,或者精度问题

3.5、变量、常量、作用域、命名规范

1. 变量

  • Java是一种强类型语言,每个变量使用前都必须声明其类型
  • Java变量是程序中最基本的存储单元,要素包括变量名,变量类型和作用域
//数据类型 变量名 = 值;
//可以在同一行使用逗号隔开同多个类型的变量,但是不建议这样使用
  1. 变量作用域
- 类变量(static):伴随着类的加载而产生,其所有权属于该类
- 实例变量 		 :伴随着类的加载而产生,其所有权属于该类
- 局部变量  		 :伴随着类的加载而产生,其所有权属于该类
  1. 变量的命名规范:
    Java——零基础速成学习_第5张图片

引用于《阿里巴巴Java开发手册》

  1. 常量
  • 常量:
    其值经初始化后,在程序运行过程不允许被更改。
//修饰符 不存在先后顺序,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

Java——零基础速成学习_第6张图片
输出:
Java——零基础速成学习_第7张图片

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、位运算

Java——零基础速成学习_第8张图片
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。

因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。

3.6.5、三元运算符
 x ? y : z
//如果x为真,则结果为y,否则为z

在这里插入图片描述
输出:
Java——零基础速成学习_第9张图片

3.7、包机制

3.7.1、包的语法格式:
  • package Base_Java;
  • 一般利用公司域名倒置作为包名;com.example.www
import java.util.*; //通配符* 导入包下所有的类

3.8、JavaDoc生成文档

  • javadoc命令是用来生成自己API文档的

  • 参数信息
    Java——零基础速成学习_第10张图片

    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类
  1. 数组的工具类java.util.Arrays

    由于数组对象本身并没有什么方法可以供我们使用,但API提供了一个工具类Arrays供我们使用。
    Array类中的方法都是static修饰的静态方法,使用时直接使用类名进行调用,可以不用对象调用。

  2. 常用功能

    给数组赋值:fill方法。
    排序:sort方法,升序。
    比较数组:equals方法比较数组中元素值是否相等。
    查找数组元素:binarySearch对排序好的数组进行二分查找法操作。

  3. 冒泡排序

//冒泡排序
//1.比较数组中两个相邻的元素,如果第一个数大于第二个数,交换它们位置
//2.每一次比较,都会产生一个最大或最小的数字(升序为最大数)
//3.下一轮则可以少一次排序
//4.依次循环,直到结束

4.稀疏数组

1.有效值的个数

2.创建一个稀疏数组

3.遍历二维数组,将有效值存放到稀疏数组

4.输出稀疏数组

》》》下一节

:第二天 初识Java入门基础(中)

你可能感兴趣的:(java,开发语言,程序人生)