一、概述
- Java是一种编程语言,目前Android的Framework层也是主要由Java编写的
- Android系统是目前世界上市场占有率最高的移动操作系统,由于历史原因,Android使用Java来开发APP,当然现在也可以用Kotlin来开发
- Java被编译成字节码后,由Java虚拟机执行。类似的,Kotlin也可被编译为字节码
二、JAVA语言特点
2.1 简单
语法与C、C++很接近,从某种意义上讲,它是由C和C++演变而来,易学习和使用。
- 对C++来说进行了简化和一定的提高,如:使用接口代替了复杂的多重继承以及取消了指针,还通过实现垃圾自动回收机制,大大简化了程序员的资源释放管理工作;
- 提供了丰富的类库和API(Application Programming Interface,应用程序编程接口)文档,以及第三方开发包工具包,还有大量的基于Java的开源项目,帮助程序设计人员参考学习;
- JDK(Java Development ToolKit,Java 开发工具包)是开放的源代码之一,可以通过分析项目的源代码,来提高自己的编程水平;
2.2 面向对象
面向对象是Java语言的基础,也是Java语言的重要特性。
面向对象:一种程序设计技术。
- 重点在数据(即对象)和对象的接口(功能)
- 以对象为基本单元,包含属性(对象的状态)和方法(对象的行为)
2.3 分布式
主要是操作分布和数据分布
- 操作分布:在多个不同的主机上布置相关操作
- 数据分布:将数据分别存放在多个网络中不同的主机上,借助的是URL(Uniform Resource Locator,统一资源定位符)访问网络对象,访问方式和访问本地系统相似。
- Java语言具有一个强大的,易于使用的网络能力,这是非常适合于分布式计算程序的。
- Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java.net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。
- Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
2.4 多线程(交互性、实时性)
多线程机制使应用程序在同一时间并行执行多项任务,很好的保证了不同线程,能够正确的共享数据。
2.5 高性能
Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。
与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
2.6 跨平台
Java自带的虚拟机很好地实现了跨平台性。Java源代码经过编译后生成二进制的字节码是与平台无关的,Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够Write once, run anywhere(一次编译,到处运行)的原因。Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。
跨平台性:是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。
这是软件发展的趋势和编程人员追求的目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。
2.7 可移植
可移植性来源于跨平台性性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
2.8 安全
在Java语言中删除了类似于C语言中的指针和内容释放等语法,有效的避免了非法操作内存,代码要经过校验之后才能够运行,所以未经允许的Java程序不可能出现损害系统平台的行为,最大的好处就是,Java可以编写防病毒和可修复的系统,Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击,从而可以提高系统的安全性。
2.9 健壮
Java语言的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
2.10 动态
Java语言设计目标之一:适应于动态变化的环境。
Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类,这也有利于软件的升级。Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
三、数据类型
四、变量
1.作用域:一个变量在程序中的可见性和生命周期,根据作用域的范围,可以分为
类变量:class ,在整个类中被访问
局部变量:function,仅在此方法中被访问
块变量: {},一对花括号之间的代码块,仅在此块中被访问
public class Variable{
static int classVaria le
}
五、类和对象
5.1 类
5.2 对象
1.创建对象
- 【1声明】 - 具有变量名称和对象类型的变量声明。
- 【2实例化 】-
new
关键字用于创建对象。 - 【3初始化】 -
new
关键字后跟对构造函数的调用,此调用初始化新对象。
String str = new String("str");
类型 名称 = new 类型(赋值)
六、运算符
-1 < i < 10
C:非0即真,↑不对但不会报错,而是如果i>1的话就是返回1,而后有1又与10进行比较.
java:关系运算符的结果只有真(true)和假(false),是直接编译报错的
a+=b
a=a+b
C 等价
JAVAa+=b等价与a=(short)(a+b)
七、数组
用来存储相同类型元素的固定大小顺序集合
数据类型[] 数组名称 = new 数据类型[]
八、循环
while循环:在每次循环之前检查条件表达式的真假,只有当条件为真时才执行循环体内的代码。
九、 递归 一种强大且常用的编程技术
(一)概念
在函数或方法的定义中调用自身的过程
(二)原理
函数调用栈的原理
当一个方法(包含参数、局部变量和返回地址等信息)被调用时,会在调用栈中创建一个对应的栈帧,在递归中,方法会在自身的定义中调用自身,这会导致多个相同方法的栈帧依次入栈。当满足终止条件时,递归开始回溯,栈帧依次出栈,方法得以执行完毕。
(三)关键
定义好递归的终止条件和递归调用的条件。
如果没有适当的终止条件或递归调用的条件不满足,递归可能会陷入无限循环,导致栈溢出错误
(四)应用场景
-
数学问题:如计算阶乘、斐波那契数列等。
-
数据结构操作:如遍历树的节点、链表反转等。
-
搜索和回溯算法:如深度优先搜索、回溯法等。
-
分治法:如归并排序、快速排序等。
(五)实现方法
在Java中,实现递归通常需要定义一个递归函数或方法。递归函数需要满足以下两个要素: * 终止条件(Base Case):定义递归结束的条件,避免陷入无限循环。
(六)递归调用(Recursive Call)
在方法的定义中调用自身,处理更小规模的子问题。
public class Factorial {
public static int factorial(int n) {
// 终止条件
if (n == 0) {
return 1;
}
// 递归调用
return n * factorial(n - 1);
}
public static void main(String[] args) {
int n = 5;
int result = factorial(n);
System.out.println("Factorial of " + n + " is: " + result);
}
}