1、Java语言特点了解
1. java语言:
有些语言提供了可移植性、垃圾收集等机制,但是没有提供一个大型的库。如果想要有酷炫的绘图功能、网络连接功能或者数据库存取功能,就必须动手编写代码。Java具备所有这些特性,它是一种功能齐全的出色语言,是一个高质量的执行环境,还提供了一个庞大的库。
2. java特点:
(1)简单性:Java语言是C++语法的一个“纯净版本”。没有头文件、指针运算等。
(2)面向对象:面向对象设计是一种程序设计,将重点放在数据(对象)和对象的接口上。
(3)分布式:Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。
(4)健壮性:Java编译器能够检测许多其它语言中仅在运行时才能够检测出来的问题。(花几个小时找指针bug很难受吧!)。
(5)安全性:运行时堆栈溢出,这是蠕虫和病毒常用的攻击手段。破坏自己的进程空间之外的内存。未经授权读写文件。
(6)体系结构中立
(7)可移植性:二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串则采用标准的Unicode格式存储。Java中的int永远为32位整数。
(8)解释性
(9)高性能
(10)多线程:多线程可以带来更快的交互响应和实时行为。如今,我们非常关注并发性,因为摩尔定律即将走到尽头。我们不再追求更快的处理器,而是着眼于获得更多的处理器,Java时第一个支持并发程序设计的主流语言。
2、Java基本数据类型
2.1标识符和关键字
2.1.1一个简单的Java应用程序
//简单写Hello,World!
public class FirstText {
public static void main(String[] args) {
System.out.println("We will not use 'Hello,World!'");
}
}
2.1.2注释
1. 第一种单行注释://
2. 第二种多行注释:/* /(注释不能嵌套!)
3. 第三种文档注释:以/**开始,以/结束
2.1.3标识符命名规范
- 标识符由字母、下划线_、美元符号$和数字组成,长度不受限制。
- 标识符的第一个字符不能时数字。
- 标识符不能是关键字。
- 标识符不能是true、false和null
- 标识符区分大小写。
2.1.4Unicode字符集
Java语言使用Unicode字符集,可识别65536个字符。Unicode字符集的前128个字符刚好是ASCII码,大部分国家的“字母表”都是Unicode字符集中的一个字符。Java所谓的字母包括了世界上大部分语言中的“字母表”。
2.1.5关键字
关键字不能作为标识符来命名
关键字有:abstract、boolean、break、byte、int、if、char等等
2.2基本数据类型
- 逻辑类型:boolean 值只能为true或者false
- 整数类型:byte、short、int、long
- 字符类型:char
- 浮点类型:float、double
- NaN(不是一个数字)
类型 | 字节数 | 取值范围 |
---|---|---|
int | 4字节 | -2147483648 ~ 2147483647 |
short | 2字节 | -32768 ~ 32767 |
long | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
bye | 1字节 | -128 ~ 127 |
long型常量后缀l或者L表示 :long a = 120L
float型常量后缀f或者F表示:float b = 123.345f (保留8位有效数字)
2.3基本类型转换
数据转换按照精度从低到高排列:
byte short char int long float double
1.当把级别低的变量的值赋给级别高的变量时,系统会自动完成数据类型的转换:
public class FirstText {
public static void main(String[] args) {
int x = 50;
float y;
y = x;
//输出y将是 50.0
}
}
2.当把级别高的变量的值赋给级别低的变量时,必须使用类型转换运算:(类型名)要转换的值;
public class FirstText {
public static void main(String[] args) {
int x = (int)34.89;
long y = (long)56.77F;
int z = (int)1999L;
//输出 x y z的值,结果是 34、56、1999、类型转换运算的结果的精度低于原数据的精度
//因为强制类型转换通过截断小数部分将浮点值转换为整型。
//如果想对浮点数进行舍入运算,以便得到最接近的整数,可以使用Math.round方法。
`double x = 9.997;
int n =(int) Math.round(x);`
}
}
2.4运算符
2.4.1自增自减运算符
只需要记住a++和++a
区别:a++是先用a 然后再自增,可以理解为后自增,而++a是 先自增后用a,可以理解为先自增
2.4.2逻辑运算符
&与&&运算结果相同
当符号左边是false时,&继续执行符号右边计算
&&不执行。 二者都为false
|与|| 当左边为flase二者都会执行
当左边为true时,|继续执行右边得运算,||不再执行右边运算
instanceof运算符
instanceof运算符是二目运算符,左面的操作元是一个对象,右面是一个类。
当左边的对象是右边的类或者子类创建的对象时,该运算符结果位true,否则是false。
2.4.3三元表达式
三元表达式非常简洁好用:
条件 ? 表达式1:表达式2
x
3、输入与输出数据
3.1.1输入基本型数据
Scanner scan = new Scanner(System.in);
public class FirstText {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
byte b = scan.nextByte();
double c = scan.nextDouble();
String d = scan.next();
}
}
3.1.2输出基本数据类型
System.out.println(a);
out可以使用printf()方法(类似C语言中的printf()函数)
System.out.printf("%d\n",a);
拓展:文件的输入与输出
从文件读取内容:
Scanner in = new Scanner(Path.of("C:\\myfile.txt"),StandardCharsets.UTF_8);
写入文件:
PrintWriter out = new PrintWriter("C:\\myfile.txt",StandardCharsets.UTF_8);
4、字符串
Java字符串就是Unicode字符序列。
String a = ""; //空串
4.1子串
String类的substring()方法可以从一个较大的字符串提取一个子串。
public class FirstText {
public static void main(String[] args) {
String a ="Hello";
String sub = a.substring(0, 3);
System.out.println(sub);
//输出结果为 Hel
//substring截取范围 [0,3) 左闭右开。
}
}
4.2拼接
字符串的拼接在java中非常简单:使用 +号连接两个字符串即可
public class FirstText {
public static void main(String[] args) {
String a ="Hello";
String b ="World";
System.out.println(a+b+"!");
//输出结果为 HelloWorld!
}
}
4.3不可变字符串
String类没有提供修改字符串中某个字符的方法。如果希望修改字符串的内容,不能直接操作。但是在java中我们可以灵活多变:若想将"HelloWorld"---->"HelloWorpp"
用字符串截取办法截取"HelloWor" 再拼接上 + "pp"即可完成
public class FirstText {
public static void main(String[] args) {
String a ="HelloWorld";
String b =a.substring(0,8);
System.out.println(b + "pp");
//输出结果为"HelloWorpp"
}
}
4.4空串和null串
空串""是长度为0的字符串,可以用如下方法检查是否为空串
if(str.length() == 0)或者if(str.equals(""))
空串和null是不一样的,检查是否为null方法
if(str == null))
注意:如果再一个null值上调用方法,会出现错误!
5、if、while、for、switch语句以及break、continue用法
5.1if、while、for、switch
if条件语句用法格式:
if(表达式){
若干语句;
}
if-else语句格式:
if(表达式){
若干语句;
}else {
若干语句;
}
switch开关语句
public class FirstText {
public static void main(String[] args) {
switch (表达式){
case 常量值1:
若干语句;
break;
case 常量值2:
若干语句;
break;
case 常量值n:
若干语句;
break;
default:
若干语句;
}
}
}
case标签可以是:
- 类型为char、byte、short、或者int的常量表达式
- 枚举常量
- 字符串字面量
do-while循环语句:
do{
若干语句;
}while(表达式);
while语句格式:
while(表达式) {
若干语句;
}
for语句的语法格式:
for(表达式1;表达式2;表达式3){
若干语句
}
5.2中断流程控制break、continue
- break
作用:可以跳出当前循环
2.continue
作用:使程序重新开始循环
5.3大数
如果基本的整数和浮点数不能满足下需求,那么可以使用java.math包中的两个类:BigInteger和BigDecimal
BigInteger a = new BigInteger("2222222222222222222222222222222222222222547546235345345");
大数其实就是将它转换成了字符串的形式表达,大数的加减乘除运算要用这个方法:
BigInteger c = a.add(b); //c = a+b
6、数组
6.1数组声明
int[] a;
int a[];
int[] a = new int[100]
int[] a = new int[]{1,2,3,4,5,6,7};
数组的声明形式有很多样,但要记住长度为0的数组和null是不一样的
new arr[0]或者new arr[]{} 都可以表示长度为0
6.2数组元素
- 创建一个数字数组是,所有元素都初始化为0
- boolean数组的元素会初始化为false
- 对象数组的元素则初始化为一个特殊值null,表示这些元素还未存放任何对象。字符串也如此
再次强调不要用null的值去调方法,会报错!!
6.3for each循环
java中有一种增强for循环,格式如下:
for(类型 变量:集合){
sout(变量);
}
public class FirstText {
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3};
for (int x : a) {//增强for each
System.out.println(a);
}
for(int i=0; i < a.length;i++){
System.out.println(a[i]);
}
}
}
增强for循环的缺点是 无法对下标进行操作,常用于对集合的遍历使用。
若想进行下标操作,推荐使用传统for循环
6.4数组的拷贝与排序
数组的拷贝使用Arrays.copyOf();这里就不详细介绍了可以多看看API文档
数组的排序使用的是Arrays类中的sort方法:
public class FirstText {
public static void main(String[] args) {
int[] a = new int[]{2, 1, 3};
int[] b = Arrays.copyOf(a, 3); //数组的复制
Arrays.sort(b);//排序
System.out.println(Arrays.toString(b));
//输出结果[1,2,3]
}
}
这个方法使用的是优化了的快速排序(QuickSort)算法
6.5二维数组
- 对于二维数组的遍历如果要用增强for循环,也就是for each也要用两层
- 二维数组的遍历方法可以使用
Arrays.deepToString(a);
7.结尾
- 对于面向对象之前的内容就总结这么多,如果有不足之处,希望大家多多包涵,多多支持。如果有不懂的地方可以直接私信问我,欢迎来访!
- 我将会继续更新关于Java的学习知识,感兴趣的小伙伴可以关注一下。
- 文章写得比较走心,用了很长时间,绝对不是copy过来的!
- 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。