关于Java的一些基础概念

通过这段时间的学习,对这些概念有了一点的了解,现在摘录下来做个记录,继续加深印象,同时联系打字。

一、面向对象与面向过程的区别

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采取面向过程开发,性能是最重要的因素。

去电:没有面向对象易维护、易复用、易扩展。

面向对象

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活易于维护。

缺点:性能较低。

经过一段时间的学习,对面向对象有了一点点理解,面向对象是一种思考方式,但是并不是说所有的问题都可以用面向对象来解决。我自己感觉Java比较好在于解决了C++多继承这个bug,我自己的观点是程序的易维护性应该比运行效率更重要,多继承时常导致继承关系很难被理顺。

二、Java语言的特点

1、简单易学;

2、面向对象(封装、继承、多态);

3、平台通用(虚拟机实现);

4、可靠性;

5、安全性;

6、支持多线程(C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能进行多线程程序设计,而Java语言提供了多线程支持);

7、支持网络编程并且很方便;

8、编译与解释共存。

Java学起来简单吗?没感觉,只不过学过C语言之后再来看Java可能比较简单一些;

Java做电脑界面很方便,怪不得用来开发安卓系统;

不过,Java做图形界面方便,也有与串口有关的与其他硬件通信的API,为什么做仪器界面设计的不用Java呢?可能是不如matlab方便,毕竟matlab本来就是用来处理数据的。

三、关于JVM、JDK和JRE

JVM:JVM是Java虚拟机,是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,在不同的系统给出相同的结果。

JRE:JRE是Java运行时的环境。是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机(JVM),Java类库,Java命令和其他一些基础构件,但是不能用来创建新程序。

JDK:Java Development Kit是功能齐全的Java SDK,拥有JRE所有的一切,还有编译器(javac)和工具。能够创建和编译程序。

四、Java与C++的区别

都是面向对象的语言,都支持封装、继承和多态;

Java不提供指针来直接访问内存,程序内存更安全;

Java的类是单继承的,但是可以应用多个接口,实现C++多继承的功能;

Java有自动内存管理机制,不需要手动释放无用内存。

为什么会有人没学过C++,C++和C不是一样吗?Java也不是没有指针,只是具体细节被封装起来不暴露出来,比如声明一个字符串String ab,这个时候这个ab实际就可以看作是指针,或者说指向一个对象的变量,就可以看做是指针;

可能就是Java不考虑那么细,于是不适合结合硬件;

相比之下,Java确实是更加智能。

五、字符型常量和字符串常量的区别

1、形式上:字符常量是单引号引起的一个字符,字符串常量是双引号引起的若干个字符;

2、含义上:字符常量相当于一个整形值(ASCII值),可以参加表达式运算,字符串常量代表一个地址值;

3、内存大小:字符常量占两个字节,字符串占若干个字节。

我是把字符串看作是一个类,因此可以调用各种方法。

六、关于构造器Constructor

父类的私有属性和构造方法不能被继承,所以Constructor不能被(重写)override,但是可以被(重载)overload。一个类里面可以有多个构造函数。

七、重载和重写的区别

重载:发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,返回值和访问修饰符可以不同,发生在编译时。

重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出异常范围小于等于父类,访问修饰符大于等于父类。

八、String StringBuffer和StringBuilder

可变性:String类中使用final关键字字符数组保存字符串,private final char value[] ,所以String对象是不可变的。而StringBuffer和StringBuilder继承自AbstractStringBuilder类,也是用char value[] 保存字符串,没有用final关键字修饰,所以这两种对象都是可变的。

线程安全:

String的对象不可变,线程安全;

StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,因此线程安全;

StringBuilder没有对方法加同步锁,因此非线程安全。

性能:

每次对String类型进行改变时,都会生成一个新的String对象,然后将指针指向新的String对象。StringBuffer每次都会对StringBuffer本身进行操作,而不是生成新的对象宾改变对象引用。相同情况下使用StringBuilder相比使用StringBuffer可以获得10%-15%的性能提升,但是会冒多线程不安全的风险。

Java为了保证线程安全提供了很多部件,包括提供繁多的数据结构的类型,确实提供一些便利但是也算是Java设计的一个问题。

九、自动装箱和拆箱

装箱:将基本数据类型用他们对应的引用类型包装起来;

拆箱:将包装类型转变为基本数据类型。

十、接口与抽象类的区别

1. 接口的方法默认是public,所有的方法在接口中不能有实现,抽象类可以有抽象的方法;

2. 接口的实例变量默认是final类型的,而抽象类则不一定;

3. 一个类可以实现多个接口,但最多只能实现一个抽象类;

4. 一个类实现接口就要实现接口的所有方法,而抽象类不一定;

5. 接口不能用new实例化,但是可以声明,但是必须引用一个实现该接口的对象。从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范

十一、==与equals

==的作用是判断两个对象的地址是不是相等。也就是判断两个对象是不是同一个对象;

equals有两种使用情况:

1. 类没有覆盖equals方法。则通过equals比较该类的两个对象时,等价于通过“==”比较这两个对象;

2. 如果类覆盖了equals方法,可以实现两者内容相等则返回true。

说明:

String中的equals方法是被重写过的,object中的equals比较的是对象的地址,而String中的equals比较的是对象的值。

那么Java中有运算符重载么?还是一般通过这种方式实现?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值