JAVA概述与基本语法
一、JDK的组成
了解JVM,JRE,JDK的基础概念,更好的理解JAVA语言程序的运行。
二、IDEA的一些知识
注释在了IDEA中的第一个JAVA项目里,可自行翻看(其实用了就知道了,主要就是项目结构和快捷方式)
三、JAVA的基础语法
1、注释的方式
主要就是没见过文档注释
2、变量的定义
a、注意变量的声明定义只需一次,后续调用变量不能重复的声明,否则视为定义重名的变量
b、变量的定义只在当前{}下有效,跳出当前{}则变量就无了
3、数据类型
a、整型有byte、short、int(默认,4个)、long,浮点型有float(4个)和double(8个),字符有char(2个),布尔有boolean不同在于存储所占的字节数,也决定了数的上下限。
b、在你定义时,随便写的数值,如果是整型默认是int,小数默认是double。如果想定义成其他需要加后缀,例如: long int a = 2l/2L(加后缀l/L),float的后缀是(f/F)定义同上。
4、数据类型转换
a、自动类型转换---小范围可以直接赋给大范围,表达式中小范围自动提升成大范围再一起算。除此还有像byte,short会自动转成int再算,int是默认且最常用的。
b、强制类型转换---如果要大范围赋给小范围就得用,写法和python有点不同,例如:b=(int)a ,可能导致数据丢失,其次在小数转整数的时候也可能会用。
5、运算符
a、基本C、JAVA、Python的运算符都差不多
b、+(加号)在数字和字符串一起运算的时候会充当连接符,最后得到字符串,但是数字和字符算是ASCII加最后结果还是数字。
c、JAVA不需要格式化输出,上面说的"+"充当连接符可以直接把不同类型的输出混在一起,很方便!
d、三元运算符, 格式——条件表达式?值1:值2,例如:
int max_num = num1>num2? num1:num2;
6、流程控制的结构
a、while就是先在外面定义好用来判断的变量flag、k、count然后在执行语句里做变化,最后这个变量是保存下来的,不像for中i,j用完就释放了。一般用于循环次数未知,循环条件是某个更具体的判断。
b、其他结构都差不多,就是switch和do while 不怎么用,语句格式注意一下。
c、break和continue都是在循环里做跳出了,不能用于if语句,但break可以用在switch里。
7、JAVA的一些内置API的使用
a、上面提到的java核心类库中写好了很多java类可以直接调用,具体可以去官网下文档查看。
b、举个例子:如随机数生成
- 导入包(其实不需要自己导,你调用的时候会自动帮你import)
- 实例化,(具体实例化方法,每个API也不同,可以看文档示例)
Random r = new Random()
- 调用方法
int i = r.nextInt(10) //输出0-9的随机数
c、再举个例子:键入Scanner
- 导入包(其实不需要自己导,你调用的时候会自动帮你import)
- 实例化
Scanner sc = new Scanner(System.in)
- 调用方法
String name = sc.next() // 键入字符串
8、java数组
a、定义格式,跟c和python还不太一样
- 首先括号写前面,例如:int[] a = {1,2,3},就很清晰知道是个什么类型的数组
b、两种定义方式--静态和动态——(java数组必须先定义好长度,系统才能去分配空间,和python不太一样)
--静态:
double[] b ={1.0,2.0,3.0} //(提供初始值)
--动态:
double[] k = new double [3] //(不用提供初始值,系统用默认值先存,需要定义好长度)
c、java中数组的定义类似于C++中的指针,本质上数组名存储内存开辟的数组的首地址,如果执行如下赋值操作:---int[] a = b ;这时a,b将指向同一个数组,用任何一个数组名修改对应索引,最后都会改变。
int[]a = new int[100] //这个java写法与下面c的写法等同
int*a = new int[100] //(C或者C++的写法)
d、可能要用到数组的拷贝的方法:
int[]b = Arrays.copyOf(a,length)//length可任意。此时a,b相互独立
Arrays这个类里提供了很多数组操作的方法:如sort,toString,deepToString等。
e、数组的遍历,传统for循环方法, a.length表示数组a的长度,用来限定循环次数
f、二维数组,书上有讲,定义,遍历,初始化方法都类似,例如:
double[][]a=new double[2][5]
- JAVA实际上是没有二维数组的,二维数组也是相当于存了多个一维数组,数组中每个元素存另外多个一维数组的位置,所以二维数组还能是不规则的,也就是每一行都代表一个一维数组,且长度不一样。
g、这里提供一种快速打印数组的方式:
System.out.println(Array.toString(a))//一维数组快速打印
System.out.println(Array.deepToString(b))//二维数组快速打印
h、java程序执行时的内存分配(感觉和单片机的工作区有相似处)
---方法区,栈内存,堆内存
9、方法--在面向对象,类中函数就叫方法
a、方法的定义和使用
--方法因为是在面向对象的类里的,所以没有顺序区别,也不用声明(和C不太一样)
--前面有个修饰符,后面面向对象会具体讲,现在固定为public static,后面就明白了
--其他写法和python,c都差不多,形参,返回啥的。
b、方法的内存机制
--其实就是程序调用不同方法的时候,内存的使用方式。主要涉及方法区和栈内存。
--首先把类class和定义的各个方法放入方法区
--接着就是从main方法开始,按照调用顺序把方法压入栈内存中,从上往下,执行完释放。
c、方法的参数传递
--形参,实参,都是作值传递
--基本类型的参数,传递的是数值,不改变实参本身。
--引用类型的参数(如:数组),传递的是地址,会改变实参本身,因为传入的是指向堆内存中的地址,做一些修改操作的时候,会改变堆内存中的值。
d、方法的重载
--同一个类中有多个方法名称相同,但是形参列表不同,这些方法就是重载的方法 (修饰符,返回值无所谓)
--调用方法会自动通过形参来判断是哪个方法,所以是可以同名的