Java学习笔记1(基本程序设计结构)
1、Java语言特性
1.简单性
Java算是C++语法的一个“纯净”版本了,里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。
2.面向对象性(封装,继承,多态)
简单的讲,面向对象设计是一种程序设计技术。它将重点放在数据(即对象)和对象的接口上。用木匠打一个比方:一个“面向对象”的木匠始终首先关注的是所制作的椅子,其次才是所使用的工具和材料;而一个“非面向对象”的木匠主要考虑的是所用的工具。
3.分布式
Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其边便捷程度就好像访问本地文件一样。
4.健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
Java非常强调进行早期的问题检测、后期动态的(运行时)检测,以及消除容易出错的情况。Java与C/C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。
5.安全性
Java要适用于网络/分布式环境。为了实现这个目标,安全性颇受重视。使用Java可以构建防病毒、防篡改的系统。比如说运行时堆栈溢出,这是蠕虫和病毒常用的手段;破坏自己的进程空间之外的内存;未经授权读写文件。
6.体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。
7.可移植性
与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算的行为都有明确的说明。
8.解释型
Java解释器可以在任何移植了解释器的机器上直接执行Java字节码。由于连接是一个增量式且轻量级的过程,所以开发过程也变得更加快捷,更加具有探索性。
9.多线程(多线程机制使应用程序在同一时间并行执行多项任)
Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
2、JVM、JRE和JDK的关系
JVM:
Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
JRE:
Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK:
Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等
JVM&JRE&JDK关系图
Java基本数据类型图
当用一个二元运算符连接两个值时,(如a+b,a为整型,b为浮点型),首先会将两个操作数转换为同一种类型,然后再进行计算:
- 如果a和b中有一个操作数是double类型,另一个数也会转换为double类型
- 否则,如果其中一个数是float类型,另一个转换为float类型
- 否则,如果其中一个数是long类型,另一个转换为long类型
- 否则,两个数都会被转换为int类型
强制类型转换
double x = 9.997;
int nx = (int) x;
其强制类型转换结果为9
注意:如果试图将一个数值转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断为一个完全不同的值。
String类型
- String类的substring方法可以从一个较大的字符串提取出一个子串:
String a = "hello";
String s = a.substring(0,3);
上述代码输出是一个由"hel"组成的字符串。
- Java语言允许使用+号拼接两个字符串
String a = "deleted" + abc;
检测字符串是否相等
- 可以用equals方法检测两个字符串是否相等:
String s = "hell";
String a = "hell";
s.equals(a)
- 如果想不区分大小写检验两个字符串是否相等,可以用equalsIgnoreCase方法:
"Hell".equalsIgnoreCase("hello");
注意!!一定不要用==运算符检测两个字符串是否相等,这个字符串只能够确定两个字符串是否放在同一个位置上。
空串与NULL串
- 空串" "是长度为0的字符串,可以用if(str.length == 0)检验一个字符串是否为空串
- 检验是否为NULL串可以使用if(str == null)来判断,如果在一个null值上调用方法会出现错误
输入与输出
输入:Scaner类定义在java.util包中
Scanner in = new Scanner(System.in);
String name = in.nextLine(); //读取一行输入
String nickname = in.next() //读取一个单词,以空白符作为分隔符
int age = in.nextInt(); //读取一个整数
输出:
System.out.println(); //标准输出
System.out.print(); //格式化输出
文件的输入与输出
- 想要读取一个文件,需要构造一个Scanner对象:
Scanner in = new Scanner(Path.of("myfile.txt"),StandardCharsets.UTF_8);
不能读取一个不存在的文件
- 想要写入文件,就需要构造一个PrintWriter对象:
PrintWriter out = new PrintWriter("myfile.txt",StandardCharsets.UTF_8);
如果文件不存在被写入文件则创建该文件
数组的打印和排序
- 利用Arrays.toString(a)来打印出数组a里面的元素
- 利用Arrays.sort(a)对数值型数组a进行排序