java和C++的不同点

由于之前在学c++,最近由于好奇,开始学java。在学习过程中整理一些异同点或者我认为的重点。

【java为什么这么受欢迎】

java可以跨平台实现,由于Java虚拟机的机制,使其可以“一次编写,到处运行”。java虚拟机相当于是一个自带的翻译机器。将你写的的java程序翻译成各种系统能够理解的机器语言。于是就可以实现跨平台的运行实现。

【java和C++的不同点】

1.如果将一个类声明为public,那么需要保证文件名称和这个类名称相同。

2.程序运行的起点main()方法,main()方法之前必须加上public static void这几个标识符。。。C语言中的函数在java中称为方法method

3.C++中,函数之间嵌套的时候的变量名可以重复,里面的会覆盖外层的。

例如:

fun()
{
    int i=1;
    {
        int i=2;
    }
}

C++中这样不会出问题,内层的会覆盖外层的

java中,在方法(函数)中定义的变量,内层与外层的命名一样会出错。

4.关于布尔型的区别

C/C++中,非0即真。即非零的数都认为是true,0认为是false。

java中,0/1和true/false无关,true就是true,不是1,也不是非0.false就是false ,不是0。也就是布尔型与整形无关。

5.java的foreach循环

foreach循环是for循环的简化版,用于遍历数组

for循环遍历数组:

for (int element;element<numArray.Length;element++)
{
    System.out.print(numArray[element]);
}

foreach循环遍历数组:如下代码就会输出数组里的所有元素了

for (int element:numArray)
{
    System.out.print(element);
}

6、数组的定义

C++中,数组定义 int month[]={31,30,21}

java中,int month[12]={31,30}或者int [12]month={31,30},这两种定义方式都是错的,在定义数组时,不能在方括号中写下数组的长度,正确的定义方式Int[ ] month={31,30};

java使用数组之前需要:(1)声明数组(2)分配内存给数组

例如

int[] score;
score=new int[3];

也可以用一行来表示,如:

int[] score=new int[11]

 会在声明的同时,分配一块内存给该数组使用。

7、栈内存,存取速度快,栈中数据可以共享,仅在表尾进行插入或者删除。

堆内存,是一个程序运行动态分配的内存区域,通过new建立的都是在堆里

java堆使用完有垃圾回收机制进行回收,C++需要用户手动回收释放,否则可能会内存溢出

 

【java知识点】

1.类型转换

自动类型转换:当转换后数据类型不小于转换前类型的时候,可以自动转换。,例如int转为float

强制类型转换:当不能自动转换的时候就需要用强制转换。例如:h=(float)a/b或者h=a/(float)b或者h=(float)a/(float)b

   只要变量之前加上想要转换的数据类型,运行的时候就会强制转换,而且不会影响原先所定义的数据类型。

2.按位与,按位或

正常的与/或  &&   ||

按位与/按位或  &  |         先转换为二进制,再一位一位的比较,以与为例,全1则1,有0则0.

3.带标签的continue语句

continue加标签,可以跳出当前的深度循环,进入标签所表示的循环层次,进入下一轮循环。

4、java中变量遵循一个原则:先定义,并初始化后,再使用。

在定义一个类型变量,在刚开始的时候,无法给出一个明确的值,就可以用一个null代替。但是null不能赋值给基本类型变量,如Int a=null;就是错误的方法。

5、类的标识符除了Public、protect、private、default(默认模式),还有final

final有“无法改变的”和“终态的”含义,一个类一旦被声明为final,这个类不能被继承,因此final的成员方法没有机会被覆盖,默认情况下类都是default的,在设计类的时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被拓展,那么就设计为final类。

6、static修饰的成员不能访问没有static修饰的成员

7、“==”是比较对象内存地址值(即所谓的引用值),而“equals”是比较对象内容的。

8、this只能在非静态方法中使用。this的含义相当于“我是小明”,“我是小红”这种里面的“我”,虽然都是我,但是指代的含义并不同。例如:如果给构造方法person()中的形参给同名的对象属性赋值,例如name=name就容易产生歧义,所以用this.name=name;就清晰了,表示person方法中形参name给本对象的成员变量name赋值。

9、接口

接口是一种特殊的类。接口中的所有成员访问类型都必须为public

定义接口:

interface A
{
public static string S="Hello";
}

接口必须有子类,子类依靠implements关键字可以同时实现多个接口,extends是接口的继承。例如:

abstract class C
{
public abstract void fun();
}


class Print implements USB  //打印机实现USB接口标准
{
public void work();
}

class X extends C implements A,B
{
public void print()
{
....
}
}

java中接口是实现多继承的一种机制

10、java中的Object类

Object类是类层次结构的根,位于继承树的顶层,java中的所有类根本上都继承自Object类,他是java中唯一没有父亲的类。任何类都是他的子类。如果一个类没有使用extends关键字明确表示继承自另一个类,这个类就默认继承自Object类。如下两种表达方式表达意思是一样的

class Person extends Object{}
class Person{}

11、System类

System类中的所有成员都是静态的,要引用这些方法和变量,可直接使用System类作为前缀

12、java中堆和栈的区别

(1)堆内存是栈内存的一个子集

(2)栈内存里面的数据可共享,但是其中数据的大小和生存期必须在运行之前确定

(3)堆内容是运行时可动态分配的数据区,速度比栈内存慢,栈内存里面的数据不可共享,但是其中数据的大小和生存期在运行时确定

(4)new关键字是运行时在堆内容里面创建对象。每new一次都一定会创建新对象,因为堆数据不共享

每一块栈内存只能保存一块堆内存的地址,但是,一块堆内存可以同时被多个栈内存指向。如果一块堆内存空间没有任何的栈内存指向,这块空间就会成为垃圾,所有的垃圾等待被JVM中的垃圾回收进行不定期的收集,同时进行内存空间的释放

13、java异常处理 try  catch  finally

try{ }区块准备捕捉异常,区块内若有异常发生,程序运行就中断,并抛出异常类所产生的对象

抛出的异常如果是catch()内欲捕获的异常类,catch就会捕获这个异常,然后进入catch块内继续运行

无论try块内是否捕捉到异常,或者捕捉的异常是否与catch()括号内的异常相同,最终一定会运行finally块里的程序代码

finally程序代码运行结束后,程序再回到try-catch-finally块之后继续运行

其中,finally块可以省略,则直接继续运行

举例

try
{
    int arr[]=new int[5];
    arr[10]=7;
}
catch(ArrayIndexOutOfBoundsException ex)
{
    System.out.printIn("数组超出绑定范围");
}
finally  //这个块里代码一定会执行
{
    System.out.printIn("这里一定会被执行");
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值