进入Java的世界

2016/11/17: 开发环境搭建
相关参考:http://blog.csdn.net/21aspnet/article/details/18815397
运行: Eclipse->Run->RunAs->Java Application
2016/11/30:Android工程搭建:
http://www.cnblogs.com/xdp-gacl/p/4322165.html
运行android工程出现的几个错误:
1、Unsupported majar.minor Version 52.0
解决方案:安装jdk1.8,重新配置,JAVA_HOME值换成jdk1.8版本的安装目录,window-preference-java-compiler中Compiler complience level改成1.8。java-installed jres add jdk1.8对应的jre。project-properties-java compiler 中enable project specific settings选中,
Compiler complience level为1.6
参考:http://bbs.csdn.net/topics/391925979
2、appcompat_v7工程报错
兼容2.2之前的版本,解决方案之一是修改最小兼容版本到4.0以上
参考:http://jingpin.jikexueyuan.com/article/47096.html
3、APK打包
参考:http://blog.csdn.net/ns_code/article/details/16828449
2017/2/14: C++和Java异同
1、数据类型
Java:4种整型byte、short、int、long,byte一个字节,short两个字节,int四个字节,long八个字节,而且都是有符号的;2种浮点型float、double; 1种用于Unicode编码的字符单元的字符类型char; 1种用于真值的boolean类型true、false;整型和boolean类型无法相互转换,编译不过;
C++: 整型包括char、short、int、long,同时可以使用unsigned 和 signed修饰,默认是signed, 另外可以用long修饰,不同平台long字节数是不一样的,32位平台是4字节,64位是8字节;2种浮点型float、double;1种用于真值的bool类型true、false;整型和bool类型可以相互转换,0表示false, 非0表示true;
2、变量初始化
Java: int a; System.out.println(a); //直接编译失败,变量没有初始化
int a;仅仅是声明;在Java中,变量声明尽量靠近第一次使用的地方
C++:int a;是定义 extern int a;是声明
3、常量
Java: 使用关键词final,例如 final doub a = 9.0;
C++: 使用关键词const, 例如const int b = 89;
4、位移运算
Java:>>高位补0;>>>用符号位填充高位;没有<<<
C++: >>扩展符号位
5、字符串
Java:String a = “abcd”; 类似于C++的const char*, 是不可变的,字符串常量是分配在堆上的,是共享的方式,不要误认为是字符数组。不能修改字符串中的字符,a = “cdab”, 这种赋值只是将a引用另外的字符串”cdab”,而原来的“abcd”仍然是不变的。
C++: const char* a = “abcd”,ANSI中定义的string类是可修改的
检测字符串是否相等
Java:String a= “abcd”;
String b = “abcd”;
a.equals(b);来判断a的内容是否等于b;而不能用 ==,这个运算符只能用来确定两个字符串是否放在同一位置,更类似于C++的 指针;字符串常量是共享的,但 + 或 substring等操作产生的结果并不是共享的
C++:string有重载 == 操作符,所以可以用来判断内容是否相等
6、类class
Java://public 类,公有类
public class A
{
//instance fields,实例域尽量是private
private final String name;

//constructor
public A(String me) {name = me}

//methods
public String getName() {return name;}//这种返回对象的方式是不合适的,因为若返回引用,则返回name的引用,name就可能被改写,应该首先对其克隆

public boolean equals(A other)
{
    return name.equals(other.name);//这个可能会带来疑惑,竟然访问了ohter的私有阈,原因是other同样是A类,A类的方法可以方位A类的任何一个对象的私有域,这是基于类的访问权限。
}

public static void main(String[] args)
{
    System.out.printf("i love alicia");
}

}//分号可有可无,一般不用写
源文件名必须与公有类相匹配,即必须是A.java。一个源文件中,只能有一个公有类,可以有任意数目的非公有类。
String str = new String(“abcc”);
A a = new A(srt);
Java中的类都是在堆上分配,必然伴随着new 操作符
C++:
class A
{

};//必须有分号

7、final关键词
Java中final关键字的作用:

a.作用于类:不允许扩展该类,即不能用该类来定义子类。

b.作用于方法:子类不能覆盖这个方法,但是可以被继承

c.作用于域:构造对象之后不能改变该域的值。

d.作用于函数参数:可以读取,但是不能改变该参数。

注意:final类的所有方法自动成为final的,不包括域。

将方法或类声明为final主要目的是确保它们在子类中不会改变语义。

String类就是一个final类,不允许定义String的子类。如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。

C++中final关键字是C++11新增的,作用为:

a.作用于类:阻止一个类成为基类,即不允许扩展该类。

b.作用于虚方法:组织派生类覆盖此虚方法。
参考:https://www.devbean.net/2012/05/cpp11-override-final/
显示override和final

8、null 与 NULL
Java中null,表示该对象变量没有引用任何对象
C++中NULL表示空指针,即指针没有指向任何对象;没有空引用;
Java中的对象变量看做C++的对象指针
Java: Date birthday = new Date();
C++: Date* birthday = new Data();

9、java.lang
java开发的基础包。该包不需要import。

10、控制流程:Java和C++基本一致
块:{ }包含的区域,Java中嵌套的{int n; {int n;}}不能声明同名的变量,在C++中是可以的,内存定义的会覆盖外层定义的。
switch case: case类型C++是整型和枚举类型;Java可以是整型、枚举、字符串。
break:Java可以带标签(label)
start:
while(){…; break start;}
do-something
for each循环:
int[] a = new int[10];
for(int element : a)
System.out.print(a);
11、运算符(+、-、*、/、==)重载:java没有

12、Java没有头文件,使用import导入包。

13、数组
Java:定义方式 int[] a = new into[8]; 或者 int a[]; Java程序员通常喜欢第一种,因为它将类型int[] 和变量名分开了;创建数组时,整型会初始化为0;对象数组会初始化为null; 数组是对象,数组赋值会指向同一份引用;数组分配在堆上
C++:定义方式 int a[8]; //分配在栈上
int* a = new int[8];//分配在堆上,和Java类似

14、主函数main()
Java: 每个类中都可以定义main,程序名没有存储在args数组中,
java Message -h world
arg[0]是“-h”,并不是Message;
public static void main(String[] args)
{}
C++:一个进程只有一个主函数。main()函数本身是在索引0为的第一参数。 所以, argc总是至少为1 。它的总数是从argv列阵的元素数目。 这意味着, argv[0]的值是至关重要的。 如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1]
int main(int argc, char* argv[])
{
}

15、多维数组
Java:实际没有多维数组,其实是一维数组,数组的数组
double[][] a = new double[6][7];
访问二维数组:
for(double[] row:a)
for(doube value:row)
System.out.print(value);
可以交换两行,这个地方其实也说明数组是对象。
double[] temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
定义不规则数组:
double[][] a = new double[6][];
for(int =0; i<6; ++i)
a[i] = new double[i+1]
Java中的double[][] a = new double[6][7];
不同于C++中double a[6][7];也不同于double (*a)[6] = new double[10][6];
其实是相当于指针数组
double** a = new double*[10];
for(int i=0;i<10;++i)
a[i] = new double[6];

16、静态域和静态方法
Java:使用.,比如Math.PI
C++: 使用::,比如Math::PI
可以使用对象来调用静态方法,但容易引起混淆,建议使用类名
静态方法的使用场景:
1)一个方法不需要访问对象状态,所需参数都是通过显示参数提供
2)一个方法只需要访问类的静态域

你可能感兴趣的:(Java)