Java基础,两万字长文(搬砖整理,侵权删文)

Java基础(搬砖整理,侵权删文)

一、Java概述

1、JVM、JRE、JDK的关系

​ JVM是Java虚拟机,Java程序要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。

​ JRE是Java虚拟机和Java程序所需要的核心类库等。核心类库主要是java.lang包:包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。如果想运行一个开发好的Java程序,计算机只需安装JRE即可。

​ JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包含JRE。所以安装了JDK就无需再安装JRE了。其中的开发工具:编译工具、导包工具等。

img

2、跨平台性及原理

​ 是指Java语言编写的程序,一次编译之后,可以在多个系统平台上运行。实现原理:Java程序是通过Java虚拟机在系统平台上运行的,只要该系统装载相应的JVM,该系统就可以运行Java程序。

3、Java语言的特点

​ 简单易学(语法与C、C++相近)、面向对象(封装、继承、多态)、平台无关性(JVM实现)、支持网络编程且很方便(本身就是为简化网络编程设计的)、支持多线程(多线程机制使应用程序在同一时间执行多项任务)、健壮性(强类型机制、异常处理、垃圾自动回收)、安全性等。

4、字节码及其好处

​ Java源码经过虚拟机编译器编译后产生的文件(.class文件),他不面向任何特定的处理器,只面向虚拟机。

​ 好处:Java语言通过字节码的方式,在一定程度解决了传统解释性语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且由于字节码不专对一种特定的机器,因此Java程序无需重新编译便可在多种不同的计算机上运行。

5、解释器与编译器

​ Java中引入虚拟机的概念,即在机器与编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码,java源程序经过编译器编译成字节码,字节码再由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器的机器码,在特定机器上执行。

​ Java源码->编译器->jvm可执行的字节码->jvm->jvm解释器->机器可执行的二进制机器码->程序运行。

6、Java中的主类?应用程序与小程序的主类有何不同?应用程序与小程序有何不同?

​ 一个程序可以有多个类,但只有一个类是主类,在Java应用程序中,主类是指包含main方法的类,而在Java小程序中,主类是一个继承自系统类JApplet或Applet的子类,应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口。

​ 简单说应用程序时从主线程启动(也就是main方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash小游戏类似。

7、Java与C++的区别

​ 1、都是面向对象语言,都支持封装、继承、多态

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

​ 3、Java类是单继承的,C++的类是多重继承的;Java中的接口可以实现多继承

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

二、基础语法

1、Java中的数据类型

​ 1、基本数据类型:

​ 数值型:整数类型(byte,short,int,long) 浮点类型(float,double)

​ 字符型:char

​ 布尔型:boolean

​ 2、引用数据类型:

​ 类class 接口interface 数组[]

img

2、一些关于数据类型的问题

1、switch能否作用在byte上,能否作用在long上,能否作用在string上?

​ 在Java5以前,switch(expr)中expr只能是byte、short、char、int。Java5之后引入了人枚举类型,expr也可以是enum类型,从Java7开始,expr还可以是字符串,但是长整型long在所有的版本中都是不可以的。

2、用最有效率的方法计算2*8

​ 2<<3(2左移3位相当于乘以2的三次方,右移三位相当于除以2的三次方)

3、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

​ 12和-11,四舍五入的原理是在参数上加0.5然后向下取整。实际上,Math.round参用的是国际通行的banker算法,四舍六入五取偶,概括为:四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。

4、float f = 3.4是否正确

​ 不正确,3.4是双精度数,将双精度数double赋值给浮点型float属于向下转型,会造成精度损失,因此需要强制类型转换float f = (float)3.4,或这写成float f = 3.4F。Java中浮点数在没有声明的情况下,都默认为double。

5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

​ 对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1也是int类型,需要强制类型转换才能赋值给short型。而对于short s1 = 1; s1 += 1;可以正确编译,因为s1+=1其中隐含了强制类型转换。

6、运算符&和&&的区别

​ &有两种用法:1、按位与 2、逻辑与。&&运算符是短路与运算,逻辑与和短路与的差别非常大,虽然二者都是要求运算符两侧的布尔值为true整个表达式才为true。&&之所以称为短路与运算,是因为如果&&左边的表达式的值是false,右边的表达式会直接被短路,不会进行计算。逻辑或|和短路或||的差别也是如此。

3、编码及注释

​ Java中采用Unicode(标准码)编码标准,他为每一个字符制定了一个唯一的数值,因此在任何语言和平台,程序都能放心使用。

​ 注释是用于解释说明程序的文字。有单行注释“//注释文字”,多行注释“/注释文字/”,文档注释“/注释文字/”。作用:在程序中,尤其是复杂的程序中,适当的田间注释可以增加程序的可读性,有利于对程序的修改、调试和交流。注释的内容在程序编译的时候会被忽略,不会产生目标代码,注释部分不对程序执行产生任何影响。注意事项:多行注释和文档注释都不能嵌套使用。

4、访问修饰符

​ Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。

​ private:在同一类内可见。使用对象:变量、方法。注意:不能修饰类(外部类)。

​ default:(即缺省,不使用任何关键字)在同一包内可见,不使用任何修饰符。适用对象:类、接口、变量、方法。

​ protected:对同一包内的类和所有子类可见。适用对象:变量、方法。注意:不能修饰类(外部类)。

​ public:对所有类可见。适用对象:类、接口、变量、方法。

img

5、关键字

1、Java中有没有goto

​ goto是Java中的保留字,在目前版本的Java中没有使用。

2、final的作用

​ 用于修饰类、属性、方法。

​ 1、被final修饰的类不可以被继承。

​ 2、被final修饰的方法不可以被重写。

​ 3、被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的。

3、final、finally、finalize的区别

​ final可以修饰类、变量、方法,修饰的类不能被继承,修饰的方法不能被重写,修饰变量表示该变量是一个常量不能被重新赋值。

​ finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码放在finally代码块中,不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

​ finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System.gc()方法时,由垃圾回收器调用finalize()回收垃圾,一个对象是否可回收最后判断。

4、this关键字的用法

​ this自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。用法有三种:

​ 1、普通的直接引用,this相当于是指向当前对象本身。

​ 2、形参与成员名字重名,用this来区分。

public Person(String name, int age) {
   
    this.name = name;
    this.age = age;
}

​ 3、引用类本身的构造函数。

class Person{
   
    private String name;
    private int age;
    
    public Person() {
   
    }
 
    public Person(String name) {
   
        this.name = name;
    }
    public Person(String name, int age) {
   
        this(name);
        this.age = age;
    }
}
5、super关键字的用法

​ super可以理解为是指向自己超类(父类)对象的一个指针,而这个超类指的是离自己最近的一个父类。super也有三种用法:

​ 1、普通的直接引用:与this类似,super相当于是指向当前对象的父类引用,这样就可以用super.xxx来引用父类对象的成员。

​ 2、子类中的成员变量或方法与父类中的成员或方法同名时,用super区分。

class Person{
   
    protected String name;
 
    public Person(String name) {
   
        this.name = name;
    }
 
}
 
class Student extends Person{
   
    private String name;
 
    public Student(String name, String name1) {
   
        super(name);
        this.name = name1;
    }
 
    public void getInfo(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值