java基础学习

Posted sqzrlqq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础学习相关的知识,希望对你有一定的参考价值。

java基础学习

 

 

(一)Java基础

 

1.1Java 语言特点

  1.面向对象(封装,继承,多态)

  2.平台无关性(Java虚拟机实现平台无关性,一次编译,到处运行)

  3.简单易学(Java的面向对象更接近人的语言习惯)

  4.安全性,可靠性(java中没有指针,程序员无法直接操作内存,把操作权限交给java虚拟机,使程序不让容易出现内存泄漏和内存溢出问题)

  5.支持多线程

  6.编译与解释并存(Java编译生成字节码文件,交给Java虚拟机解释)

1.2基本语法

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的 Java 程序由 public static void main(String []args) 方法开始执行。

 

1.3Java修饰符

  • 访问控制修饰符 : default, public , protected, private
  • 非访问控制修饰符 : final, abstract, static, synchronized

 

1.4面向对象与面向过程对比

    1.面向过程: 缺点 不容易维护,不复用,不易扩展

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

1.5JDKJREJVM 之间的区别于关系

  (1).三者之间的区别

    JDK:java的开发和运行环境,包含了完整的JRE,还包含了供开发者使用的工具包

    JRE:java的运行环境,非开发者只需要安装JRE来运行程序,包含java运行所需要的类库和JVM

    JVM:java虚拟机,当运行一个程序是,JVM负责将字节码转换为特定的机器代码,JVM提供了内存管理/垃圾回收和安全机制等,这种独立硬件和操作系统,正是java程序可以一次编写多处执行的原因

  (2).三者之间的关系

    1.作为程序员,安装的JDK,因为其中包含了JAVA开发工具包,其中包含了JRE

    2.作为使用者,运行已经开发好的JAVA程序,只需要安装JRE

    3.JVM和JRE的关系:JRE包含了JVM,JVM是运行Java程序的核心虚拟机,同时也包含了Java程序所需要的环境支持

    4.JDK>JRE>JVM

1.6什么是Java环境变量

  1.环境变量的意义

    让java bin目录下的工具,可以在任意目录下运行,原理是将该工具所在的目录告诉了系统,当使用该工具是,由系统帮我们去找制定的目录

  2.JAVA_HOME

    指向jdk的安装目录。引用%JAVA_HOME%即可,避免每次使用都输入很长的字符串,方便第三方引用约定好的JAVA_HOME 变量,保证程序正常运行

  3.Path环境变量

    设置Path环境变量之后就可以再任何目录下执行javac/java等工具命令

 

1.7javac命令和java命令可以做什么事情

  java运行分两部分:一个是编译,一个是运行

  javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序,对指定扩展名的.java文件进行编译,编译后生成class文件

  java:负责运行的部分,会启动jvm虚拟机,加载运行时所需要的类库,并对class文件进行执行,一个文件要被执行,必须要有一个执行的起始点,这个起始点就是main函数.

1.8什么是字节码。采用字节码的好处是什么

  1.扩展名为Java,Java的源文件,编译之前的纯文本文件,用来储存Java源代码

  2.扩展名为class,Java的类文件,编译之后的二进制文件,存储的是字节码文件

  也就是编译后的.class文件存储就是字节码

  采用字节码的最大好处,可以实现一次编译,到处运行,也就是java的与平台无关性,他依靠不同平台的Java虚拟机将编译后的字节码解释成集体平台上的机器指令执行

1.9import java javax有什么区别

  刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来说使用。然而随着时间的推移,javax 逐渐的扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包将是太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准API的一部分。

所以,实际上java和javax没有区别。这都是一个名字

1.10 javac++的区别

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

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

  Java的类是单继承的,c++支持多重继承,虽然Java的类不可以多继承,但是接口可以多继承

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

 

1.11 Java数据类型

1.基本数据类型

 

 技术图片

 

 

 

 

2.引用类型

类、接口类型,数组类型,枚举类型,注解类型

3.区别

  基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上

  引用数据类型 在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。

 

1.12Java访问修饰符

    技术图片

 

 

 

1.13 字符型常量和字符串常量的区别

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

  2.含义上: 字符常量相当于一个整形值( ASCII含义上: 字符常量相当于一个整形值( ASCII 值),可以     

         参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置)。

  3.占内存大小 字符常量只占2个字节 字符串常量占若干个字节(至少一个字符结束标志) (注意: char在Java中占两个字节)

技术图片

 

 

 

1.14 Java面向对象编程三大特性:封装、继承、多态

 

封装

  封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问

继承

  继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。

  通过使用继承我们能够非常方便地复用以前的代码 同时继承也为实现多态做了铺垫。

 

关于继承

  1.子类拥有父类非 private 的属性和方法。

  2.子类可以拥有自己属性和方法,即子类可以对父类进行扩展。

多态

  所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定

1.15 代码中如何实现多态?

   实现多态主要有以下三种方式:

    1.接口实现

    2.继承父类重写方法

  3,同一类中方法进行重载

1.16. 多态有什么好处?

  允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。主要有以下优点:

    1.可替换性:多态对已存在代码具有可替换性

    2.可扩充性:增加新的子类不影响已经存在的类结构

    3.接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。

 

 

1.17. 接口和抽象类的区别是什么

  1.接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法。

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

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

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

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

 

 

技术图片

 

以上是关于java基础学习的主要内容,如果未能解决你的问题,请参考以下文章

零基础学习Java开发,这些学习笔记送给你!

零基础如何学习JAVA编程开发,JAVA基础教程之入门学习方法

JAVA基础学习流程

java基础学习总结

Java培训分享:零基础怎么学习Java?

java基础学习03(java基础程序设计)