Java 旨在竭尽所能为最广泛的计算平台开发可移植的高性能应用程序。
通过使应用程序在异构环境之间可用,企业可以提供更多的服务,提高最终用户生产力并加强沟通与协作,从而显著降低企业和消费类应用程序的拥有成本。
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 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
宣言:一次编写,到处运行
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
删除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.文本注释
快捷键:/**+回车
Java 所有的组成部分都需要名字。类名、变量名、方法名都被称为标识符
关键字
标识符注意点
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
弱类型语言:JavaScript,Python
Java的数据类型分为两大类
//整数
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 之间的区别
位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数
字节(byte, B):是计算机中 数据处理 的基本单位,习惯上用大写B表示
1B(byte) = 8bit,1字节等于8位
字符:指计算机中使用的字母,数字,字和符号
1bit表示1位
1Byte表示一个字节 1B=8b
1024B = 1KB, 1024KB = 1M, 1024M = 1G
由于Java是强类型语言,所以不同类型的数据先转化位同一类型,再进行运算。
强制转换,(类型)变量名,容量由高到低
自动转换,容量由低到高
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容器转换到低容量的时候,强制转换
4.可能存在内存溢出,或者精度问题
1. 变量
//数据类型 变量名 = 值;
//可以在同一行使用逗号隔开同多个类型的变量,但是不建议这样使用
- 类变量(static):伴随着类的加载而产生,其所有权属于该类
- 实例变量 :伴随着类的加载而产生,其所有权属于该类
- 局部变量 :伴随着类的加载而产生,其所有权属于该类
引用于《阿里巴巴Java开发手册》
//修饰符 不存在先后顺序,static可以写final后面 常量一般用大写字符
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
double pow = Math.pow(2,3); // (底数,指数)double型
System.out.println(pow); //8.0
第一个值为false,后面就不进行判定了
&& 逻辑与运算:两个变量都为真,结果为true
第一个值为true,后面就不进行判定了
|| 逻辑与运算:两个变量有一个为真,结果为true
! 取反,真变为假,假变为真
只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。
因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)来判断a是不是偶数。
x ? y : z
//如果x为真,则结果为y,否则为z
import java.util.*; //通配符* 导入包下所有的类
输入:javadoc -encoding UTF-8 -charset UTF-8 Doc(类名).java
会自动生成该类有关的API文档,查看文件夹发现多了一些文件
打开 index.html(首页)查看文档注释
Scanner s = new Scanner(System.in);
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;
}
//计算1+2+3+...+100
int i=0;
int sum=0;
while(i<100){
i++;
sum+=i;
}
System.out.println(sum); //5050
//先执行后判断,至少执行一次
do{
i++;
sum+=i;
}while(i<100) //跟上面效果一样
//(初始化;条件判断;迭代)
for(int i=0;i<100;i++){
i++;
sum+=i;
}
int [] numbers = {10,20,30,40,50}; //定义一个数组
for (int x:numbers){
System.out.println(x); //遍历数组的元素 10 20 30 40 50
}
- - break & continue
Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段。
方法包含一个方法头和一个方法体。
修饰符 返回值类型 方法名(参数类型 参数名,...){
方法体...
return 返回值;
}
调用方法:对象名.方法名(实参列表)。
int larger = max(30,40);
扩展:值传递和引用传递 ( Java都是值传递)
重载是在一个类中,有相同的方法名,参数列表不同的方法。
方法重载的规则:
递归就是:A方法调用A方法,自己调用自己!
递归的能力在于用有限的语句来定义对象的无限集合。
阶乘 n!
public static int f(int n){
if(n==1) return 1;
return n*f(n-1); //递归:调用自身
}
dataType[] arrayRefVar = new dataType[arraySize]; //int[] nums=new int[10]
获取数组长度: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);
}
//静态初始化:创建+赋值
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;
数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
其长度是确定的,数组一旦被创建,它的大小就是不可改变的。
其元素必须是相同类型,不允许出现混合类型。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组变量属于引用类型,数组也可以看作对象,其中每个元素相当于该对象的成员变量。
数组本身就是对象,Java中对象是在堆中的,因此数组本身是在堆中的。
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;
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们使用,但API提供了一个工具类Arrays供我们使用。
Array类中的方法都是static修饰的静态方法,使用时直接使用类名进行调用,可以不用对象调用。
常用功能
给数组赋值:fill方法。
排序:sort方法,升序。
比较数组:equals方法比较数组中元素值是否相等。
查找数组元素:binarySearch对排序好的数组进行二分查找法操作。
冒泡排序
//冒泡排序
//1.比较数组中两个相邻的元素,如果第一个数大于第二个数,交换它们位置
//2.每一次比较,都会产生一个最大或最小的数字(升序为最大数)
//3.下一轮则可以少一次排序
//4.依次循环,直到结束
4.稀疏数组
1.有效值的个数
2.创建一个稀疏数组
3.遍历二维数组,将有效值存放到稀疏数组
4.输出稀疏数组
:第二天 初识Java入门基础(中)