优快云——JAVA语言学习
+++
一、图灵完备
图灵完备(Turing Complete)
图灵完备是指机器执行任何其他可编程计算机能够执行计算的能力。
图灵完备也意味着你的语言可以做到能够用图灵机能做到的所有事情,可以解决所有的可计算问题。
简单来讲,一切可计算的问题都能计算,这样的虚拟机或者编程语言就叫图灵完备的。当然图灵完备也可能因为陷入死循环而导致程序崩溃。
在某些场景中图灵完备需要限制语言,有循环执行语句,判断分支语句等。
举个例子,如果有人说,我的东西是图灵完备的,也就意味着理论上它能够用来解决任何计算性的问题。
此外,图灵完全性通常指具有无限存储能力的通用物理机器或编程语言。
与图灵完备相反的是图灵不完备,图灵不完备应该是不允许或限制循环。可以保证,每段程序都不会死循环,都有运行完的时候。
比特币的脚本系统是图灵不完备的,而一些Token的智能合约系统是图灵完备的。
图灵完备和图灵不完备各有其优势,图灵不完备会更安全些,图灵完备会更智能些。
二、基础知识
1.关键字
- this
this.属性 操作当前对象的属性
this.方法 调用当前对象的方法
- break
用于switch结构和循环结构(跳出case语句/跳出当前循环结构)
- continue
只能用于循环结构(跳过本次循环,重新开始下一次循环)
- return
指定一个方法返回什么值
退出当前方法,并返回指定的值
2.JAVA基本数据类型
简单类型 | boolean | byte | char | short | Int | long | float | double | void |
---|---|---|---|---|---|---|---|---|---|
二进制位数 | 1 | 8 | 16 | 16 | 32 | 64 | 32 | 64 | – |
封装器类 | Boolean | Byte | Character | Short | Integer | Long | Float | Double | Void |
3.权限控制关键字
修饰词 | 本类 | 同一个包的类 | 继承类 | 其他类 |
---|---|---|---|---|
private | √ | × | × | × |
无(默认) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
4.运算符
- 算术运算符
操作符 | 描述 | 例子 |
---|---|---|
+ | 加法 - 相加运算符两侧的值 | A + B 等于 30 |
- | 减法 - 左操作数减去右操作数 | A – B 等于 -10 |
* | 乘法 - 相乘操作符两侧的值 | A * B等于200 |
/ | 除法 - 左操作数除以右操作数 | B / A等于2 |
% | 取余 - 左操作数除以右操作数的余数 | B%A等于0 |
++ | 自增: 操作数的值增加1 | B++ 或 ++B 等于 21(区别详见下文) |
– | 自减: 操作数的值减少1 | B-- 或 --B 等于 19(区别详见下文) |
- 关系运算符
运算符 | 描述 | 例子 |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B)为假(非真)。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B)非真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A <B)为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A> = B)为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B)为真。 |
5.JAVA里的方法重载
方法重载,指的是两个方法具有相同的方法名称是,他们共存的一种方法。
-
参数数量一样但是类型不一样,可以重载
-
参数数量不一样可以重载
-
参数数量一样,相同位置类型不一样,可以重载
6.JVM&JRE&JDK
JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。
java语言是跨平台,jvm不是跨平台的。
JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。
JDK(Java Development Kit):java的开发工具,包括jre+开发工具
7.输入和输出
-
标准输入流:
首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。
Scanner in = new Scanner(System.in);
还要在程序的最开始添加上一行:
import java.util.Scanner;
这句话的作用是:引入java.util包下的Scanner类。
- 标准输出流:
System.out.println("Hello"+"World!");//在控制台中输出Hello world!
System.out.println("H"+"e"+"l"+"l"+"o");//在控制台中输出Hello
补充:想要读取不同的数据类型,需要调用不同的方法,
nextLine() 读取输入的下一行字符串,可以包含空格(遇到Enter键视为结束符)
next() 读取输入的下一个字符串(遇到空格键、Tab键或Enter键视为分隔符或结束符)
nextInt() 读取输入的下一个整数
nextDouble() 读取并转换下一个表示整数或浮点数的字符序列
类似的,还有next.Byte(), nextFloat , nextLong(), nextShot()方法,可以根据名字得出用途
三、变量
变量的类型除了前面所讲八大基本类型,还可以是类名(如String 就是标准包里的一个类的名称)。
变量的命名规则:
(1)变量名必须是一个以字母开头并由字母或数字构成的序列,且不能包含空格和java保留关键字。
(2)尽量使你的变量名有意义,容易一眼看出它本身所表达的意义,避免使用a,b,c等无意义的变量名。推荐使用驼峰命名 法来规范变量名。
3.在C/C++里区别变量的声明和定义,但是在java中,不区分变量的声明与定义。
1 局部变量:定义在方法中或局部代码块中,必须初始化(第一次赋值时分配内存空间)
局部变量的作用域在定义它的大括号内有效,在作用范围内不能重复定义。
2 成员变量:定义在类中,自动初始化默认值,访问受访问控制符限制;局部变量可以和成员变量同名。