- 1.java基础语法
- (1)基本的数据类型
类型 | 存储需求 |
byte | 1字节 |
short | 2字节 |
char | 2字节 |
int | 4字节 |
long | 8字节 |
float | 4字节 |
double | 8字节 |
其中long类型数据在初始化时要带’L'或‘l'后缀
float类型在初始化时要带’F'或‘f'后缀,其它类型不需要后缀或者可省略。
应为java中没有无符号数,所以整数类型数据的大小为:-2的n/2次方~2的n/2次方-1(n为该数据类型所占的位数)
而对于浮点型:float保留的是八位有效数字,double是十六位,所以要注意数据实际存储时可能发生截断问题导致精度损失。
当不同数据类型之间有混合运算时会有以下自动转换:byte、short、char → int → long → float → double;当byte,short,char之间运算时都变为int型,其它的同理都会默认向高级的转换,浮点型一般都默认double;
(2)输入与输出
输出常见的三种方式
System.out.println() | 输出后可以换行 |
System.out.print() | 输出后不换行 |
System.out.printf() | 与C语言中的printf用法大致相同 |
注意在输出变量之前必须要对变量赋值,不然会出现报错;
输入_方法一:Scanner,格式如下bu
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
System.out.println(a);
}
}
不同的数据类型scanner的格式也不同
int a=scanner.nextInt() | 输入一个int型的值,Byte,Short,Long,Float,Double都是同理的 |
String a=scanner.next() | 输入字符串,但是在第一个空格处会截止 |
String a=scanner.nextline() | 输入字符串,但是不会因为空格停止 |
输入_方法二:System
package org.example;
import java.io.IOException;
public class Demo {
public static void main(String[] args) throws IOException {
int a=System.in.read();
System.out.println((int)a);
}
}
这种方法比较鸡肋,只能读取第一个字符并返回ASC码值;
(3)数组:(与C语言一样都是从0开始)
定义数组:数据类型[] 数组名;或者 数据类型 数组名[];
数组在使用前一定要声明好长度不然会报错,数组在声明长度后不可再更改长度;
声明方式:数据类型[] 数组名=new 数据类型[数组长度];例如:
int[] a=new int[10];
也可以在初始化的时候直接赋值,格式如下:数据类型[] 数组名=new 数据类型[]{要初始化的值};或者 数据类型[] 数组名={要初始化的值};//这样初始化后数组的大小与初始化值的个数相等;
在C语言中并不会检查数组是否越界(不会报错),但是Java会检查数组是否越界,如果越界就会报错;如果执行如下代码,则会发生的报错如图。
public class Demo {
public static void main(String[] args){
int[] a=new int[10];
System.out.println(a[10]);
}
}
数组中还有一个常用的length函数,用于测量数组的长度。
public class Demo {
public static void main(String[] args){
int[] a=new int[10];
int len=a.length;
System.out.println(len);
}
}
最后结果会返回10,但是要注意length与length()是两个不同的东西:length返回的是一个数组的长度,而length.()返回的是字符串中有多少个char字符;
(4)分支结构:简单点来说Java中的分支结构与C语言中的大致相同,都是有if-else的分支结构与switch的分支结构,但是不同的是Java中对布尔类型数据的区分更加细致;
a.if-else结构:在C语言中如果执行如下代码则会输出“YES”(因为在C语言中0代表布尔中的false,其它数字都是true,而这段代码先对m赋值为1,编译器就会把它识别为true)
int m=0;
if(m=1)
cout<<"YES\n";
但是如果在Java中执行类似的代码则会发生报错
int m=0;
if(m=1)
System.out.println("YES");
所以在Java中使用if分支结构时一定要注意if内的表达式是不是布尔类型,而其它内容上Java中的if-else与C语言并没有太多的区别;
b. switch语句,相比于C语言Java又对switch语句进行了升级,C语言中switch(表达式)中的表达式会以int型数据进行存储,对应的case也是以int型进行判断。Java中的switch语句不仅支持对int类型的数据进行判断,还增加了String类型的判断(但是如果case的判断数据与switch的输入数据类型不同则有可能会发生报错)
public class Demo {
public static void main(String[] args) {
String a="nenu";
switch(a){
case "12":
System.out.println("12");
break;
case "nenu":
System.out.println("666");
break;
case "6":
System.out.println("6");
break;
}
}
}
最后的结果会输出666;但是如果把上述代码稍微改动一下下结果就完全不一样了;
public class Demo {
public static void main(String[] args) {
String a="nenu";
switch(a){
case "12":
System.out.println("12");
break;
case "nenu":
System.out.println("666");
break;
case '6':
System.out.println("6");
break;
}
}
把"6"改成了'6'就会发生报错
(5)循环结构:(注意判断语句是布尔类型的数据)
a. for(初始化语句;判断语句;控制语句);
Java中for循环多了一种表达方式:for(数据类型 i:数组名);这种表达方式有点类似Python的表达方法,能够遍历一个数组中的所有内容
b. while(判断语句)
c.do-while(判断),这两个结构与C语言中的用法几乎没有区别;
2.Java面向对象的三大特征:
(1)封装性:将数据和对数据的操作封装在一起,通过抽象,即从具体的实例中抽取出共同的性质形成的一般概念,例如类的概念;(封装能够对数据进行很好的保护,可以通过private来对数据进行封装,使得只能通过特定方法来对数据进行设定与读取)
(2)继承性:在一个父类(现有类)的基础上再构建一个子类(新类),子类可以拥有父类的属性以及行为,同时子类可以在此基础上增添一些新的属性的行为;
继承的作用就是能提高代码的复用性。子类拥有父类中的一切(拥有不一定能使用),它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。
(3)多态性:有两种意义上的多态,一种是操作名称上的多态,即有多个操作有相同的名字,但这些操作所接受的数据类型必须不同;另一种多态是和继承有关的多态,是指同一个操作被不同类型的对象调用时可能产生不同的行为;(多态可以帮助我们简化程序,增强代码的重用与拓展)