java吧 关注:1,293,162贴子:12,827,291

一天学会java不是问题,如果你懂c++

只看楼主收藏回复

本人有点c++基础,看了两天《java从入门到精通》,总结java不同点如下,还请高手指教。
相信c++基础好的朋友,比我理解更快,一天学会java不是问题。
过程语法都免了,只讲特征!
1 变量申明:
c++:
int a;
java:
int a = new int();
int b = new int(10);
int[] c = {1, 2};
String str = new String();
String str = "Hello";
Person mm = m;//这里 b 和 bb 使用同一内存,因为没有重新分配空间。所有对象实例是类似c++指针的东西。
int mm = m;//基本类型 int/double 等是复制操作,对象是指针指向操作。
2 继承:
c++:
class Fa
{
int a;
Fa():a(11){};
};
class Child : public Fa{}
java:
public class Fa
{
int a = 11;
Fa(){}
}
public class Child extends Fa{}
3 显式调用父类构造:
c++:
class Fa
{
int m;
Fa():m(0){};
Fa(int a){};
}
class Child: public Fa
{
Child(){};
Child(int a):Fa(a){};
}
java:
public class Fa
{
int m = 10;
Fa(){}
Fa(int a){}
void f(){};
}
public class Child extends Fa
{
int n = 11;
Child(){}
Child(float f)
{
// 调用父类的构造和成员初始化 使用 super
super.m = 20;
super(12);
}
void f()
{
// 调用父类的接口:需要用 super关键字
super.f();
}
}
4 final 关键字
java:
修饰类:
final class A{}//类 A 将不能被继承
修饰方法:
class A
{
final void f(){};// 方法 f()在子类中不能调用,也不能重载
}
修饰变量:此变量不能被修改,必须初始化。
5 abstract 关键字
java:
只要类中有函数使用此关键字,这个类的声明也要加此关键字
abstract public class A
{
abstract f(){}
}
修饰类指得是有抽象方法的类,修饰方法等同于c++的纯虚函数,不能在父类有实现,子类必须有实现
// 含有抽象方法的类,必须定义成抽象类,
// 抽象类不能生成实体对象,但可以用父类类型声明子类对象: Father fa = new Child();
// 调用子类方法:((Child)fa).childFunction();
6 Object 是祖先类,所有类直接或间接继承与该类
Object 类带的方法:
public boolean equals(Object obj)// 可以重载
{
return (this == obj);
}
public String toString() // 可以重载
{
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
7 接口
接口相当于纯虚类,允许子类多继承(java本身不支持多继承)。
接口修饰:默认修饰:接口所在包之外的类不能使用接口。public 修饰:所有类能够使用接口。
接口声明的变量:自动设置为共有的,静态的,最终的类型。
接口定义的方法:都为抽象,自动设置为 public.
接口的实现:
class 类名1 implements 接口1,接口2
{
void 接口方法1(){}
void 自用方法2(){}
}
如果实现接口的【类名1】不是抽象类,【类名1】需要实现接口1和接口2的所有方法。(与c++继承纯虚函数必须实现一样)
实现接口的【类名1】实现的方法都必须是public,因为接口中的方法都默认是public.
接口可以声明类型,但是对象必须是实体类型,比如:
Animal aa = new Tiger();
@Override 是编辑器添加的伪代码,不是什么神奇语法
接口没有构造函数,只是定义一堆函数框架。
8 内部类
很好理解,就像定义在类中的成员结构体
外部类可以访问内部类方法,但是要单独生成内部类对象。(不是同时生成)
非静态内部类可以访问宿主类的成员,静态内部类必须通过对象来访问:
class Outer
{
int a = 0;
class Inner1 //非静态类
{
int i = 0;
void f()
{
a++;//直接访问外部类成员
}
}
static class Inner2 // 静态类
{
int i = 0;
void f()
{
Outer out = new Outer();
out.a++;//必须生成对象,再调用外部类成员
}
}
void f() // 外部类方法
{
Inner1 i1 = new Inner1();
++i1.i; //操作非静态内部类成员
++Inner2.i; //操作静态内部类成员
}
}
public class Main
{
public static void main() //全局函数
{
Outer o1 = new Outer();
Outer.Inner1 i1 = new Outer().new Inner1(); //非静态声明方法
Outer.Inner2 i2a = new Outer.Inner2(); //静态声明方法
Outer.Inner2 i2b = o1.new Inner2();
}
}
9 局部内部类: 定义在函数中的类,不能在外面生成对象,仅仅在局部使用(不常用)
10 匿名内部类;(少为常用)
public class NoNameInerClass2 {
Constant getConstant(){
return new Constant(5){ //Constant 是匿名类,不用从外面声明,临时声明就可以了
int n=5;
};
}
public static void main(String[ ] args) {
NoNameInerClass2 nnic=new NoNameInerClass2();
System.out.println(nnic.getConstant().n);; // 访问匿名类型的结果
}
}
11 对象克隆:
与 c++ 深度拷贝构造相似,c++ 重载拷贝构造函数,java 用祖先类 Object 的抽象方法 Clonable(),将其实现。
可以重载 Object.clone()方法,也可以使用自定义重载,在方法中需要对所有成员分配新的空间,不要指向旧的对象。
12 其他方面:
eclipse 使用,调试
jvm 环境的熟悉,安装


1楼2014-06-01 11:56回复
    入门书籍请看:http://www.open-open.com/doc/view/08c9d5b03b954a10a9cc47b1a76f858f


    2楼2014-06-01 11:57
    回复
      2026-01-01 00:25:29
      广告
      不感兴趣
      开通SVIP免广告
      我学完java 看c++连没兴趣。


      IP属地:广东来自Android客户端3楼2014-06-01 11:58
      回复
        一天学会java的拼写


        IP属地:安徽4楼2014-06-01 12:11
        回复
          呵呵


          IP属地:江苏来自Android客户端6楼2014-06-01 12:27
          回复
            其实你只是看了所有的语法,内存分配怎样分配你知道嘛,垃圾回收机制你知道嘛,多线程,容器


            来自Android客户端7楼2014-06-01 12:42
            回复
              你只会基础语法而已,会多线程?JDBC?XML?网络......


              IP属地:湖南8楼2014-06-01 12:54
              收起回复
                楼主就使劲吹吧


                IP属地:广东来自Android客户端9楼2014-06-01 12:58
                回复
                  2026-01-01 00:19:29
                  广告
                  不感兴趣
                  开通SVIP免广告
                  其实很多人都想跟你说这两个字,只是我说出来了,装逼!


                  来自Android客户端10楼2014-06-01 13:00
                  回复
                    其实很多人都想跟你说这两个字,只是我说出来了,装逼!


                    IP属地:中国香港来自Android客户端11楼2014-06-01 13:08
                    收起回复
                      您真牛逼


                      IP属地:浙江12楼2014-06-01 13:26
                      回复
                        真是扯淡,我就是有C++基础,目前在学java


                        IP属地:浙江13楼2014-06-01 13:42
                        回复
                          10L完美的表达了我的观点
                          ﹉ ﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
                            如果不够悲伤 就无法飞翔 可没有梦想 何必远方....


                          来自Android客户端14楼2014-06-01 13:46
                          回复