Java基础知识与C语言的对比

时间:2022-10-18 20:02:18

面向对象Vs面向过程

面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种优化,操作起来更加的方便,简化了过程。面向对象有三大特征:封装性、继承性、多态性,其中封装性指的是隐藏了对象的属性和实现细节,仅对外提供公共的访问方式,这样就隔离了具体的变化,便于使用,提高了复用性和安全性。对于继承性,就是两种事物间存在着一定的所属关系,那么继承的类就可以从被继承的类中获得一些属性和方法;这就 提高了代码的复用性。继承是作为多态的前提的。多态是说父类或接口的引用指向了子类对A象,这就提高了程序的扩展性,也就是说只要实现或继承了同一个接口或类,那么就可以使用父类中相应的方法,提高程序扩展性,但是多态有一点不好之处在于:父类引用不能访问子类中的成员。

DOS常用命令

1、dir:(directory)

2、md:(make directory)

3、rd: (removedirectory)

4、cd: (changedirectory)

5、cd..: 退出第一层

5、cd\: 退出到根目录

6、del: delete

7、set:查看设置的根目录的值

8、set path:设置路径

9、cls:清除屏幕内容

 

java中的数据格式

Java基础知识与C语言的对比

 

java中的命名规范:

1、 包名:xxxyyyzzz

2、 类名、接口名:XxxYyy

3、 变量名、函数名:xxYyyZzz

4、 常量名:XXX_YYY_ZZZ

 

java中特殊于C的点:

1、 字符串和任何数据的适用“+”链接,最终都会变成字符串:

System.out.println(“haha“ + “haha”);

2、“>>“为有符号右移,最高位由原来的最高位决定;”>>>”为无符号右移,右移后,都用0补;

3、数据格式1:元素类型[] 数组名 = new 元素类型[元素个数];

eg: int[] arr = newint[5];

  数据格式2:元素类型[] 数组名 = new 元素类型[]{元素、元素。。。}

4、堆内存:通过new来建立;栈内存:局部变量;

5、特点:

1)       每个实体都有内存地址;

2)       每个实体的变量都有默认的初始值

3)       实体不再被使用时会在不确定的时间呗垃圾回收器回收,所以不用刻意去kill

java的内存清除机制举例:

int[] x= new int[3];

int[] y = x;

 

x =null;

在这个例子中,x为引用型数据,指向new开辟的int型的空间。同时又开辟了一个y去指向这个空间,当x指向空之后,对于int开辟的空间依然有y在指向,因此不会被内存清掉。也就是说只有开辟的对象空间没有引用型数据指向它时他才会自动的被回收。

开辟内存的机制:

1、 栈内存:用于存储局部变量

2、 堆内存:通过new开辟

特点:

1)       内个实体都有内存地址

2)       每个实体的变量都有默认初始化值

对于类的成员变量:

不管程序有没有显示的初始化,Java  虚拟机都会先自动给它初始化为默认值。

a)       整数类型(byte、short、int、long)的基本类型变量的默认值为0。

b)       单精度浮点型(float)的基本类型变量的默认值为0.0f。

c)        双精度浮点型(double)的基本类型变量的默认值为0.0d。

d)       字符型(char)的基本类型变量的默认为 “/u0000”。

e)       布尔性的基本类型变量的默认值为 false。

f)        引用类型的变量是默认值为 null。

g)       数组引用类型的变量的默认值为 null。当数组变量的实例后,如果没有没有显示的为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值。

数组例子:

1)   int[] a;   //声明,没有初始化默认值是null

2)   int[] a=new int[5];   //初始化为默认值,int型为0

3)       当实体不在被使用时会在不确定的时间呗垃圾回收齐回收

 

局部变量初始化:局部变量声明以后,Java虚拟机不会自动的为它初始化为默认值。因此对于局部变量,必须先经过显示的初始化,才能使用它。如果编译器确认一个局部变量在使用之前可能没有被初始化,编译器将报错。

 

数组的一些操作:

1、获取数组的长度arr.length();

2、System.arraycopy这个静态方法实现数组的数组复制。

3、arr.sort这个静态方法实现数组排序。

 

Java装载和编译原则

1.        Java的装载过程为:先装载类,然后初始化静态变量

2.        Java编译器要保证所有静态成员在使用前都分配好自己的内存空间,而非静态成员只有在使用的时候才能分配内存。(静态内部类中定义了静态成员,那么该类就一定是静态的)

3.        如果内部类不是静态的,则按照1,2条,非静态内部类只有在外部类被实现之后才能初始化

4.        按照3,只有非静态内部类初始化之后,内部类中的静态变量才能被初始化。

5.        这样的话4与2相悖,因为java编译器要保证所有静态变量在使用前都被初始化,并分配内存

6.        这样,要保证java编译器原则,如果要在内部类中定义静态成员,内部类也应该定义成静态,保证外部类一加载所有静态成员全部初始化,并拥有自己的内存空间,以备使用

java中几个常见的存储区域:

1.        方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区域,叫做方法区。

2.        常量池:常量池是方法区的一部分,主要用来存放常量和类中的符号引用等信息。

3.        堆区:用于存放类的对象实例。

4.        栈区:也叫java虚拟机栈,是由一个一个的栈帧组成的后进先出的栈式结构,栈桢中存放方法运行时产生的局部变量、方法出口等信息。当调用一个方法时,虚拟机栈中就会创建一个栈帧存放这些数据,当方法调用完成时,栈帧消失,如果方法中调用了其他方法,则继续在栈顶创建新的栈桢。