Java基础总结(一)

1. 面向对象的特征
面向对象的特征包括抽象、封装、继承和多态。

抽象就是忽略一个主题中与当前目标无关的某些方面,以便更加充分的注意到与当前目标有关的方面。抽象并不打算了解全部的问题,而只是其中的一部分,暂时不用考虑细节。抽象包括两个方面,第一是过程抽象,第二是数据抽象。

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

  封装了好处在于将变化进行了隔离,便于使用,提高了服用性,同时由于可以避免外部对于属性的直接访问,提高了安全性。

  封装的原则:将不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共的方法对其访问。

  private是一个权限修饰符,被private修饰的成员只在本类中有效。私有是封装的一种体现,但封装不仅仅是私有。


继承,继承是一种连接类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述性的方法,一个类可以从一个现有的类派生,新类继承了原始类的特性,新类称为子类或者派生类,原始类称为父类也叫基类。派生类可以从它的基类继承方法和实例变量,并且类可以增加或者修改新的方法,使其更适合特殊的需要。

多态,多态性是指允许不同类的对象对同一个消息做出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活、抽象、行为共享和代码共享的优势,很好的解决了应用程序中函数同名的问题。


2. Overload和Override有什么区别
 方法的重写overriding和重载Overloading是java多态性的不同表现。重写Overriding是父类和子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对他而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading).

3. abstract class 和 interface有什么区别?
 抽象类用于创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。接口是抽象类的变体。在接口中,所有方法都是抽象的。抽象类的子类为他们的父类中的所有抽象方法提供实现,否则他们也是抽象类。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

4. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用,对象的内容可以在被调用的方法中改变,但对象的引用是永远不会变的。

5. abstract的method是否可以同时是static,是否可以同时是native,是否可以是synchronized?
  都不能。
    abstract用来声明抽象的方法,抽象方法并没有方法类,不能被直接调用,必须在子类overriding后才能使用,所以访问被abstract修饰的方法依赖于具体的对象实例,而被static修饰的方法是被直接访问的,这就引发了逻辑中的冲突,同时还要注意,父类中是静态方法,子类中不能覆盖为非静态方法。
  native修饰的方法是本地方法,该方法的实现由非java语言实现,比如c语言,一般用于java与外界语言交互或者与操作系统交互,native可以和除abstract之外的所有java标识符连用,因为native方法是有实现体的,只不过这些实现体是由非java语言实现的,但是abstract却是显明的指定这个方法是没有实现体的。
  synchronized,用于防止多个线程同时调用一个对象的该方法,使用它的前提是该方法可以被对象直接调用的,显然和abstract不能同时连用。

6. 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可继承实体类?
 接口可以继承接口。抽象类可以实现接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。

7. Java关键字注意点
  所有的java关键字都是小写的
  goto和const是保留关键字,在java中没有使用
  true,false,null不是严格意义上的关键字,而是文字常量
8. 数组
  数组的两种初始化方式:静态初始化和动态初始化
  动态初始化数组必须给出长度,否则将报"缺少数组维数"的错误
  动态初始化二维数组时,可以只指定第一维德长度而不指定第二维的
  当数组包含的元素是引用数据类型的时候,必须为每个元素实例化,否则在使用的时候会出现空指针异常。

9. float和double都不能进行精确运算。
  例如2.0-1.1并不等于0.9,因为计算机使用的二进制并不能准备的表示浮点数
  不能简单的使用四舍五入的方法解决上述问题
  可以使用BigDecimal类来解决这个问题。
  BigDecimal a1 = new BigDecimal(Double.toString(2.0));
  BigDecimal a2 = new BigDecimal(Double.toString(1.1));
  System.out.println(a1.subtract(a2).doubleValue());

10. 自增自减运算符陷阱

  main(String[] args){
    int j = 0;
    for(int i = 0; i < 100; i++){
      j = j ++;
    }
    System.out.println(j);//打印出来的结果是0,因为j = j++,jvm工作时,先运算j++然后将j自增之前的值赋给左侧的j
  }

11. 字符与字符串陷阱
  System.out.println("a" + "b");// ab, 字符串的拼接
  System.out.println('a' + 'b');// 195, 字符a的ascii码加上b的ascii码
  System.out.println("a" + 'b');// ab,字符b被转化成了字符串b

12. java中的异常处理机制的简单原理和应用
  java程序违反了java的语义规则时,java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括两种情况。一种是java类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException.另外一种情况就是java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时使用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类.

13. finalize方法是在垃圾回收器删除对象之前对这个对象调用的一个方法.

14. 什么时候使用assert?
  通常在开发和测试时使用,在软件发布后关闭。

15. 构造函数

构造函数:构建创造对象时调用的函数,创建对象都必须要通过构造函数初始化。

作用:可以给对象进行初始化。

一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数,如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了。

一般函数和构造函数什么区别呢?

a. 构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
    一般函数:对象创建后,需要函数功能时才调用。

b. 构造函数:对象创建时,会调用只调用一次。
    一般函数:对象创建后,可以被调用多次。


什么时候定义构造函数呢?

在描述事物时,该事物一存在就具备的一些内容,这些内容都定义在构造函数中。

构造函数可以有多个,用于对不同的对象进行针对性的初始化.
多个构造函数在类中是以重载的形式来体现的。

细节:
1,构造函数如果完成了set功能。set方法是否需要。
2,一般函数不能直接调用构造函数。
3,构造函数如果前面加了void就变成了一般函数。
4,构造函数中是有return语句的,ps,可以利用这个特点来控制构造函数的初始化,比如if(age>10){return;}用来实现如果age>10那么就拒绝初始化.

16. this引用

当成员变量和局部变量重名,可以用关键字this来区分。如   

Person(String name) 
{this.name = name;
}

  this : 代表对象。代表哪个对象呢?当前对象。

this就是所在函数所属对象的引用。
简单说:哪个对象调用了this所在的函数,this就代表哪个对象。

this也可以用于在构造函数中调用其他构造函数。
注意:只能定义在构造函数的第一行。因为初始化动作要先执行。

17. 字符串的拼接:

  为连接n个字符串而重复的使用字符串连接操作符(+),需要n的平方级的时间。例如: s4 = s1 + s2 + s3;

  不过如果被拼接的字符串都是字面量的话,java编译器在编译器就会将其优化。如: S4= "a" + "b" + "c";变异完成的时候S4的值就是"abc".

  

转载于:https://www.cnblogs.com/byron0918/p/4663211.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 2分代复制垃圾回收_Java对象的后事处理——垃圾回收(二)

1 先谈Finalize()finalize()能做的所有工作&#xff0c;使用try-finally或者其他方式都可以做得更好、更及时&#xff0c;所以笔者建议大家完全可以忘掉Java语言中有这个方法的存在。——《深入理解JVM》finalize()方法确实可以实现一次对象的自救&#xff0c;但是其不确定性和…

前端学习(1555):ng-app指令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title> </head> <!-- 需…

前端学习(1556):ng-blnd指令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title> </head> <!-- 需…

标准输入输出重定向

程序会在运行中输出日志&#xff0c;并是通过java的日志类进行输出的。而如果关掉SSH运行程序&#xff0c;就会丢失这些信息。直观的解决办法是将输出到控制台的日志重定向到文件中&#xff0c;于是我将命令改为&#xff1a;sh auto.sh > console.txt &。不过事实并没像…

Java虚拟机学习 - 体系结构 内存模型(转载)

一&#xff1a;Java技术体系模块图二&#xff1a;JVM内存区域模型1.方法区 也称"永久代” 、“非堆”&#xff0c; 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB&#xff0c;最大值为64MB&#xff0c;可以通过-XX:PermSiz…

前端学习(1558):ng-repeat命令

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title> </head> <!-- 需…

前端学习(1559):ng-classt隔行变色

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

在Win7虚拟机下搭建Hadoop2.6.0伪分布式环境

近几年大数据越来越火热。由于工作需要以及个人兴趣&#xff0c;最近开始学习大数据相关技术。学习过程中的一些经验教训希望能通过博文沉淀下来&#xff0c;与网友分享讨论&#xff0c;作为个人备忘。 第一篇&#xff0c;在win7虚拟机下搭建hadoop2.6.0伪分布式环境。 1. 所需…

前端学习(1560):ng-class颜色切换

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {backgr…

MVC常见的控制器,接口,数据层之间的操作

user_books_info 类 namespace CiWong.LearningLevel.Mapping {public class user_books_info{/// <summary>/// 使用对象ID,个人版存放会员ID&#xff0c;班级版存放班级ID&#xff0c;校园版存放校园ID/// </summary>public long user_id { get; set; }/// <s…

前端学习(1561):ng-class颜色切换

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

S3C6410 裸机硬件JPEG解码(转)

源&#xff1a;S3C6410 裸机硬件JPEG解码转载于:https://www.cnblogs.com/LittleTiger/p/4681864.html

java layoutmanager_Java Swing 探索(一)LayoutManager

BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout1.BorderLayoutjava.lang.Object--java.awt.BorderLayout将版面划分成东、西、南、北、中五个区域&#xff0c;将添加的组件按指定位置放置。BorderLayout.EAST BorderLayout.WEST BorderLay…

解决虚拟机VMware安装CentOS7.0识别不到网卡

由于Vmware虚拟网卡和linux兼容问题导致驱动无法正常安装&#xff0c;默认的网卡类型不兼容. 解决方法 找到我们的Vmware虚拟机文件夹&#xff0c;将VMware 虚拟机配置 (.vmx)&#xff0c;追加一条设置我们网卡类型 ethernet0.virtualDev "e1000" 原因 VMware 都在虚…

前端学习(1562):ng-hide,ng-show

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

java socat_socat安装使用方法

socat&#xff0c;一个多功能的网络工具&#xff0c;名字来源于SOcket CAT&#xff0c;是netcat的增强版&#xff0c;也就是netcat(扩展了设计&#xff0c;并有新的实现)。------------------------------------------------------------------------0x01 安装# debian/ubuntua…

前端学习(1563):ng-if

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>ng-app指令</title><style>.red {color:…

java spring注入 静态方法_java相关:spring为类的静态属性实现注入实例方法

java相关&#xff1a;spring为类的静态属性实现注入实例方法发布于 2020-3-31|复制链接在本篇文章里小妖给大家整理的是关于spring为类的静态属性实现注入实例方法&#xff0c;有需要的朋友们可以参考下。我们知道&#xff0c;正常情况下&#xff0c;spring的一个bean要依赖其他…

java 实现超时_如何实现带有超时的Runnable? - java

我目前有一个相当简单的SSL服务器/客户端项目&#xff0c;其中涉及标准Java后端和Android前端。与客户端发送数据后&#xff0c;我想尝试从服务器读取响应。但是&#xff0c;我遇到了一个小问题。服务器并不总是响应&#xff0c;因此我不得不以某种方式尝试以异步方式获取响应。…