JAVA八股文基础知识(一)

JAVA基础知识

目录

JAVA基础知识

一.JAVA概念

1.什么是 Java?

2.JAVA有什么特点?

3.JDK、JRE、JVM 三者之间的关系?

4.什么是字节码?采用字节码的好处是什么?

二.基础语法

1.Java 有哪些数据类型?

2.变量的类型转换

3.运算符

4.&和&&有什么区别?

5.break和continue的区别及作用?

三.面向对象(上)

1.解释下什么是面向对象?面向对象和面向过程的区别?

2.面向对象的三大特性?

 3.方法的重载

4.类的定义

 5.对象的创建与使用

6.访问修饰符 public、private、protected、以及不写(默认)时的区别?

7.如何实现封装?

8.构造方法

9.this关键字有什么作用?

10.static关键字的作用


一.JAVA概念

1.什么是 Java?


Java 是一门面向对象的编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的优秀代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

2.JAVA有什么特点?

Java的语言共有十大特点:简单性、面向对象、分布性、编译和解释性、稳健性、安全性、可移植性、高性能、多线索性、动态性。Java可以编写桌面应用程序、Web应用程序、分布式系统嵌入式系统应用程序

  1. 简单性:Java语言继承了C++语言的优点,去掉了C++中学习起来比较难的多继承、指针等概念,所以Java语言学习起来更简单,使用起来也更方便。
  2. 面向对象:Java是一种面向对象的编程语言,面向对象的三大特性是封装,继承,多态
  3. 分布性:Java设计成支持在网络上应用,它是分布式语言。所以只要用Java编写了一个程序,就可以到处应用。可以节省大量人力物力。
  4. 编译和解释性:Java编译程序生成字节码,而不是通常的机器码,这使得Java开发程序比用其他语言开发程序快很多。
  5. 稳健性:Java刚开始被设计出来就是为了写高可靠和稳健的软件的。所以用Java写可靠的软件很容易。目前许多第三方交易系统、银行平台的前台和后台电子交易系统等都会用Java语言开发。
  6. 安全性:Java的存储分配模型是它防御恶意代码的主要方法之一。所以很多大型企业级项目开发都会选择用Java开发。
  7. 可移植性:Java并不依赖平台,用Java编写的程序可以运用到任何操作系统上。
  8. 高性能:Java是一种先编译后解释的语言,所以它不如全编译性语言快。但Java设计者制作了“及时”编译程序,这样就可以实现全编译了。
  9. 多线索性:Java是多线索语言,它可以同时执行多个程序,能处理不同任务。
  10. 动态性:Java语言设计成适应于变化的环境,它是一个动态的语言。

3.JDK、JRE、JVM 三者之间的关系?

  • JVM:Java Virtual Machine,Java 虚拟机,Java 程序运行在 Java 虚拟机上。针对不同系统的实现(Windows,Linux,macOS)不同的 JVM,因此 Java 语言可以实现跨平台。
  • JRE:Java 运⾏时环境。它是运⾏已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,Java 命令和其他的⼀些基础构件。但是,它不能⽤于创建新程序。
  • JDK:Java Development Kit,它是功能⻬全的 Java SDK。它拥有 JRE 所拥有的⼀切,还有编译器(javac)和⼯具(如 javadoc 和 jdb)。它能够创建和编译程序。

简单来说,JDK 包含 JRE,JRE 包含 JVM。

  • JDK = JRE + 编译运行工具
  • JRE = JVM + 各种系统类库
  • 这三者的关系是一层层的嵌套关系,JDK > JRE > JVM

4.什么是字节码?采用字节码的好处是什么?

所谓的字节码,就是 Java 程序经过编译之类产生的.class 文件,字节码能够被虚拟机识别,从而实现 Java 程序的跨平台性。

Java 程序从源代码到运行主要有三步:

  • 编译:将我们的代码(.java)编译成虚拟机可以识别理解的字节码(.class)
  • 解释:虚拟机执行 Java 字节码,将字节码翻译成机器能识别的机器码
  • 执行:对应的机器执行二进制机器码

二.基础语法

1.Java 有哪些数据类型?

定义:Java 语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。

Java 语言数据类型分为两种:基本数据类型引用数据类型

2.变量的类型转换

在程序中,经常需要对不同类型的数据进行运算,为了解决数据类型不一致的问题,需要对数据的类型进行转换。根据转换方式的不同,数据类型转换可分为自动类型转换和强制类型转换两种。

  • 自动类型转换:指的是两种数据类型在转换的过程中不需要显式地进行声明,由编译器自动完成。自动类型转换必须同时满足以下两个条件:   

                    (1):两种数据类型彼此兼容

                    (2):目标类型地取值范围大于源类型的取值范围。

        例如下面的代码:

byte b=3;
int x=b;

        在上面的代码中,使用byte类型的变量b为int类型的变量x赋值,由于int类型的取值范围大于byte类型的取值范围,编译器在复制过程中不会造成数据丢失,所以编译器能够自动完成这种转换,在编译时不报告任何错误。

  • 强制类型转换:指的是两种数据类型之间的转换需要显式地声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要强制类型转换。
//比如以下代码
int num=4;
byte b=num;
//这个代码会运行失败

        在上面地代码中,程序会提示数据类型不兼容,不能将int类型转换成byte类型,原因是将一个int类型地值赋给byte类型地变量b时,由于int类型的取值范围大于byte类型的取值范围,这样的赋值会导致数值溢出,也就是说1字节的变量无法存储4字节的整数值。

        应将上述代码改为如下代码:

//修改上面的代码
int num=4;
byte b=(byte) num;
//代码运行成功,结果为:4

3.运算符

  • 赋值运算符
  • 算数运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

4.&和&&有什么区别?

&运算符有两种用法:短路与、逻辑与。

&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。

&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&。

例如:在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

5.break和continue的区别及作用?

  • break 跳出整个循环,不再执行循环(结束当前的循环体)
  • continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)

   

三.面向对象(上)

1.解释下什么是面向对象?面向对象和面向过程的区别?

  • 面向对象:是软件开发方法,一种编程范式,面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。例如:现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。
  • ⾯向过程 :面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的一次调用就可以。
  • 面向对象:面向对象,把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事件在解决整个问题的过程所发生的行为。目的是为了写出通用的代码,加强代码的重用,屏蔽差异性。
     

2.面向对象的三大特性?

  • 封装:封装把⼀个对象的属性私有化,同时提供⼀些可以被外界访问的属性的⽅法。
  • 继承:继承是使⽤已存在的类的定义作为基础创建新的类,新类的定义可以增加新的属性或新的方法,也可以继承父类的属性和方法。通过继承可以很方便地进行代码复用。

 关于继承有以下三个要点:

  1. ⼦类拥有⽗类对象所有的属性和⽅法(包括私有属性和私有⽅法),但是⽗类中的私有属性和⽅法⼦类是⽆法访问,只是拥有。
  2. ⼦类可以拥有⾃⼰属性和⽅法,即⼦类可以对⽗类进⾏扩展。
  3. ⼦类可以⽤⾃⼰的⽅式实现⽗类的⽅法
  • 多态:是同一个行为具有多个不同表现形式或形态的能力。

在 Java 中有两种形式可以实现多态:继承(多个⼦类对同⼀⽅法的重写)和接⼝(实现接⼝并覆盖接⼝中同⼀⽅法)

 3.方法的重载

所谓方法重载就是在同一个作用域内,方法名相同但参数个数或者参数类型不同的方法。

方法重载的规则:

  1. 方法名一致,参数列表中参数的顺序,类型,个数不同。
  2. 重载与方法的返回值无关,存在于父类和子类,同类中。
  3. 可以抛出不同的异常,可以有不同修饰符。

//案例代码
//下面的方法实现两个整数相加
public static int add(int x,int y){
    return  x+y;
}
//下面的方法实现了三个整数相加
public static int add(int x,int y,int z){
    return  x+y+z;
}
//下面的方法实现了两个小数相加
public static int add(double x,double y){
    return  x+y;
}

 上述代码定义了3个同名的add()方法,但他们的参数个数或类型不同,从而形成了方法的重载。另外需要注意的时,方法的重载与返回值类型无关。

4.类的定义

在面向对象的思想中最核心的就是对象,创建对象的前提是定义一个类。类是JAVA中一个重要的引用数据类型。类是对象的抽象,用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法。成员变量用于描述对象的特征,成员变量也被称作对象的属性;成员方法用于描述对象的行为,可简称为方法。

类的定义格式如下:

class 类名{
    成员变量;
    成员方法;
}
//例如:
class Student{
    String name;//声明一个String类型的变量name
    int age;//声明int类型的变量age
    //定义read()方法
    void read(){
        system.out.println("大家好,我是"+name+",我在看书!");
    }
}

 5.对象的创建与使用

在JAVA中使用new关键字创建对象,使用new关键字创建对象的具体格式如下:

类名 对象名=null;
对象名 =new 类名();

//或者写成
类名 对象名=new 类名();
//创建Student类的实例对象,示例代码如下:
Student stu=new Student();

创建对象后,可以使用对象访问类中的某个属性或方法,对象的属性或方法的访问通过点(.)运算符实现,具体格式如下:

对象名.属性名
对象名.方法名
//案例学习:
class Student{
    String name;
    void read(){
        System.out.println("大家好,我是"+name);
    }
}
public class Example{
    public static void main(String[] args){
        Student stu1=new Student();//创建第一个Student对象
        Student stu2=new Student();//创建第二个Student对象
        stu1.name="小明";//为stu1对象的name属性赋值
        stu1.read();    //调用对象的方法
        stu2.name="小红";
        stu2.read();
    }
}

6.访问修饰符 public、private、protected、以及不写(默认)时的区别?


Java 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。可以修饰在类、接口、变量、方法。
  • private : 在同一类内可见。可以修饰变量、方法。注意:不能修饰类(外部类)
  • public : 对所有类可见。可以修饰类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。可以修饰变量、方法。注意:不能修饰类(外部类)。
     

7.如何实现封装?

类的封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法实现对内部信息的访问。

封装的具体实现过程是:再定义一个类时,将类中的属性私有化,即使用private关键字修饰类的属性。私有属性只能在它所在的类中被访问。如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的getXxx()方法(也称为getter方法)和设置属性值的setXxx()方法(也称setter方法)

8.构造方法

  1. 构造方法用来给类的成员声明初始化。
  2. 构造方法是一种特殊的方法,它的方法名与类名相同,并且没有返回值,也不需要使用void关键字修饰。
  3. 构造方法分为两种,无参构造器(默认构造方法)和有参构造器(自定义构造方法)

注意:

  • 构造方法的名称必须与类名一致。
  • 构造方法名称前不能有任何返回值类型的声明。
  • 不能在构造方法中使用return返回一个值,但可以单独写return语句作为方法的结束。
    //构造无参函数
    public class Apple{
             String name;
             float apple;
             public Apple(){
            }
    }
    
    //构造有参函数
    public class Apple{
             String name;
             float apple;
             public Apple(int name, float apple){
                this.name=name;
                this.apple=apple;
            }
    }

    9.this关键字有什么作用?

  • 使用this关键字调用本类中的属性:即形参与成员变量名字重名,用 this 来区分
public Person(String name,int age){
    this.name=name;
    this.age=age;
}
  • 使用this关键字调用成员方法,可省略不写。
  • 使用this关键字调用构造方法:即引用本类的构造函数

10.static关键字的作用

Static的特点

1、static是一个修饰符,用于修饰成员

2、static修饰的成员被所有的对象所共享

3、static优先于对象存在,因为static的成员随着类的加载就已经存在了

4、static修饰的成员多了一种调用方式,即可以直接被类名调用。类名.静态变量

5、static修饰的数据是共享数据,对象中的存储的是特有数据

public class Student {
	// 非静态变量
    public String name;
    // 静态变量
    public static int age = 22;
    
    
    public static void main(String[] args) {
        //通过先建对象调用
        Student st1 = new Student();
        System.out.println(st1.age);
        //直接通过类名调用
        System.out.println(Student.age);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值