注意这里介绍的JAVA基础是指你对C语言已经比较熟练或者有一定基础了,再学习如下这知识就会比较快。
1.JAVA也是从MAIN开始执行,但是要先定义类,文件名要与类名一致并且类名首字母要大写,同时JAVA没有include,
它不需要包含,当需要用一些额外类库的时候,需要使用import来导入,对于导入的如果不是静态的对象,还需要先创建再对象实例化才能使用。当然如果不使用额外的类库则不需要导入。
但是比如系统提供的一些类库(不需要导入),如system.out.println是静态对象,所以这个直接这么使用就可以打印
开发环境建议使用ubuntu下的,例如编译直接输入:javac hello.java
执行直接输入:java hello(是使用JAVA虚拟机来得以执行的)
2.数据类型比较:
JAVA的基本类型多了boolean,byte,其中bool和byte占用字节数一致但是取值范围不一样,其中bool取值范围只有true/false,
char使用2字节,因为JAVA使用unicode (c 一个字节)
引用包括:数组,类,接口,null
3.注释的方式是一样的
4.souceinsight是ASCII,java编译的是使用UTF8解析的,而si中写汉字是ASCII,所以utf解析不了ASCII,就编译错误,解决方法要不不用汉字,要么使用UE把文件编码格式转换一下
5. JAVA中没有malloc函数,没有指针,如果想类似使用MALLOC的方式就是类似的使用数组的方式,所以在JAVA里面定义malloc和定义数组是一样的:
java中使用char s[]=new char[100]都是在堆中分配出地址然后给地址到栈中的变量。
C中的数组定义的空间和指向的地址和普通变量一样都是在任务栈中的。
JAVA中所有的数组都是引用数据类型,没有指针,称为引用,变量里面的值是一个地址某一堆空间的地址。
java其他定义数组的方式int p2[]={1,2,3}这个是静态分配这句话在C中数据都是放在栈里,
java左边是栈,右边是堆,所以java中的数组都是放在堆里面的,栈里面是一个存储有 指向堆空间的地址的变量
java中的数组永远是引用数据类型,就是数组的空间永远是在堆里面的
5.定义一个字符串,java中的字符串是一个类定义一个字符串不能使用C语言的方式
c方式:char sh2[]="avvc",还是在栈里,一般除了malloc都是在栈里
java定义方式String shr="avb"
(所谓引用数据类型(和指针类似)就是变量所指向的空间所引用的空间在堆里,变量(存储地址)在栈里)
c中程序(main)退出会free,但一直执行main的话就要free,不然会一直泄露,或者一直分配。
java会自动释放,当指向的变量等于NULL时,就是没有东西引用堆空间里,java中垃圾回收机制就会把这块空间释放掉。所以不用让p=null就可以了。
当有两个变量指向的时候,即p2=p1=...,时,这两个都等于null才会释放。
6.数据类型转换:
java中3.14是double类型,转换方式:
float f=(float)3.14;//强制转换
float f2=3.14f;//自动转换,发生在小范围数据类型转换为大数据类型的时候
short s=1;
s=s+1;出错,数字一般都是int类型,同时参加运算,对于byte,short来说,为了保证精度,会自动转换为int,再把int赋值给short当然会出错。
short s2=1;
所以s=s+s2也是出错的,要加强制转换才行。
7.运算符,表达式,语句和c基本完全一致,
8.c中的函数,java称为方法,
java方法:
格式:public static int add(int x,inty){
}多了public static
其中加public 关键字的意思是这个一个可由外部调用的方法,方法前面加static 表示在不创建任何对象的时候都可以调用它(调用方式:类名.方法),
同时如果在字段(数据成员)前面加static ,表示这个字段对于同一个类所创建各个对象来说都只有一份空间,不加static则是每个对象都有一个存储空间。
9.java重载,函数名(返回值类型)一致,参数不一样就可以重载,调用的话是调用对应参数的方法(调用的是实参与形参一致的),
当修改返回类型是无法重载的,因为不知道你想要什么样的结果。
10.java函数参数传递,传值无法改变只能传地址,c中使用指针,java没有指针使用类似传数组名的方式实现,例如:
int p[]=new int[1];
p[0]=123;
fun2(p);//传地址进去
System.out.println("fun2: "+p[0]);//格式化打印前面使用空格,后面分隔使用+号
public static void fun2(int[] p){
p[0]=200;//修改指向的地址的内容为200;
}