Java基础——上

第一部分:Java基础

1、什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”?

Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。

一次编译,到处运行(前提:有JVM虚拟机)的原因是:Java是基于虚拟机的语言,它的执行过程是:现经过编译,编译成字节码(.class)文件,在执行的时候通过解释器

将字节码文件根据底层硬件平台的指令长度和其他特性解释成机器语言,之后在运行

2、Java中的名词:JDK,JRE,JVM都是啥

  • JDK:JDK是完整的 Java 软件开发包,包含了 JRE,编译器和其他的工具(比如:JavaDoc,Java 调试器),可以让开发者开发、编译、执行 Java 应用程序。
  • JRE:JRE是Java运行时的环境,其中包含JVM虚拟机和Java的系统类库(lang包等)
  • JVM:JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的(所以它知道底层硬件平台的指令长度和其他特性)。

3、“static”关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是 static 的方法?

static字段表示该成员是和类一同加载的,所以可以在没有实例化对象的时候进行访问

Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态(对象实例化时)绑定的,而 static方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。

private字段修饰的方法也不能覆盖,因为,你根本就不知道有这个方法存在

4、是否可以在 static 环境中访问非 static 变量?

不可以,static变量在 Java 中是属于类的,它在所有的实例中的值是一样的。当类被 Java 虚拟机载入的时候,会对 static 变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

5、 Java 支持的数据类型有哪些?什么是自动拆装箱?

  • byte
  • short
  • int
  • long
  • float
  • double
  • boolean
  • char

自动装箱是 Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把 int 转化成 Integer,double 转化成 double,等等。反之就是自动拆箱。

6、Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

方法覆盖:子类重写父类的方法(必须有相同的方法名,参数列表和返回类型)

方法重载:在同一个类中,一两个或多个同名方法,形成重载

7、Java 中,什么是构造函数?什么是构造函数重载?

当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java 编译器会为这个类创建一个默认的构造函数。

Java 中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。

8、Java 支持多继承么?

Java类不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。

Java的接口可以进行多继承,继承多个接口

9、接口和抽象类的区别是什么?

相同点:

  • 都位于继承的顶端,用于被其他类实现或继承;
  • 都不能直接实例化对象;
  • 都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

  • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
  • 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
  • 抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
  • 接口是这个事物中的额外内容,继承体系是一种 like..a关系

继承类+实现接口 ==> 他是一个人(类),但是他像一个小偷(接口)

二者的选用:

  • 优先选用接口,尽量少用抽象类;
  • 需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

10、什么是值传递和引用传递?

对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。

对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

第二部分:线程

1、进程和线程的区别是什么?

进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。

2、创建线程有几种不同的方式?你喜欢哪一种?为什么?

方法1:继承Thread类,重写run方法

public class SubThread extends Thread{

    public SubThread(){
        super("x5456");     //通过构造方法修改线程名
    }

    public void run() {
        for(int i=0;i<100;i++){
            System.out.println(super.getName()+i);
        }
    }
}

调用

public static void main(String[] args) {
    //创建刚刚继承Thread类的子类的对象
    SubThread st = new SubThread();
    //通过setName方法,修改线程名
    st.setName("x54256");
    //调用对象的start方法,会自动执行我们重写的run方法
    st.start();

    for(int i=0;i<100;i++) {
        System.out.println(Thread.currentThread().getName()+i);     //获取当前线程的对象,调用getname()方法
    }
}

方法2:实现接口Runnable,重写run方法

public class SubRunnable implements Runnable{
    public void run(){
        for(int i=0;i<100;i++){
            try {
                // 调用Thread类的sleep方法,休眠50ms,由于父接口没有throws异常,so我们只能用try...catch
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"..."+i);
        }
    }
}

调用

public static void main(String[] args) {
    //创建实现Runnable接口的类的对象
    SubRunnable sr = new SubRunnable();
    //创建Thread类的对象
    Thread t = new Thread(sr);
    //启动线程
    t.start();

    for(int i=0;i<100;i++){
        System.out.println(Thread.currentThread().getName()+"..."+i);
    }
}

实现Runnable 接口这种方式更受欢迎,因为这不需要继承 Thread 类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而 Java 不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

3、概括的解释下线程的几种可用状态。

原文地址:https://www.cnblogs.com/x54256/p/8503396.html

时间: 2024-10-22 06:38:38

Java基础——上的相关文章

Java_Day04(java 基础上,选择结构,循环结构,转跳)

1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+1; break; } 格式解释说明: switch:说明这是switch语句. 表达式:可以是byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串 case:后面的值就是要和表达式进行比较的值 break:表示程序到这里中断,跳出switch语句 default:如

Java_Day03(java 基础上,运算符等)

1:运算符(掌握) (1)算术运算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正号 c:字符串连接符 C:/和%的区别 数据做除法操作的时候,/取得是商,%取得是余数 D:++和--的用法 a:他们的作用是自增或者自减 b:使用 **(即++或--)单独使用 放在操作数据的前面和后面效果一样. a++或者++a效果一样. **(即++或--)参与操作使用 放在操作数的前面:先自增或者自减,再参与操作 int a = 10; int b = ++a; 放在操作数的后面:先参

Java_Day02(java 基础上)

1:关键字(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 组成关键字单词的字母全部小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记 2:标识符(掌握) (1)就是给类,接口,方法,变量等起名字的字符序列 (2)组成规则: A:英文大小写字母 B:数字 C:$和_ (3)注意事项: A:不能以数字开头 B:不能是java中的关键字 C:区分大小写 (4)常见的命名规则(见名知意) A:包 其实就

Java基础知识【上】(转载)

http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没有考虑到会坚持往后边写,这次应该是更新该内容.而且很讨厌写基础的东西,内容比较琐碎,而且整理起来总会很多,有可能会打散成两个章节,但是我不保证,有可能一个章节就写完了,所以有时候希望基础的很多内容还是读者自己去看看,我基本保证把基础的内容全部都写出来,见谅.这一个章节写了过后我会把前边那个关于基础类

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

28道java基础面试题-上

[软帝学院]28道java基础面试题1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么.继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的<Java与

Java基础回顾(上)

一.唠叨 有朋友开始接触Java,问我一些基础的问题,突然发现不知该如何回答,十分尴尬.痛定思痛,便回炉重造,将java基础的知识重新梳理了一遍. 以下是我看书时或摘要.或总结的语言,完全是Java中基础的基础. 二.学习笔记 (一)基本数据类型 1.标识符区分大小写:hello与Hello是不同的标识符. 2.基本数据类型的精度由低到高依次为:byte short char int long float double 3.格式控制符号: %d int类型 %c char类型 %f 浮点类型 %

JavaSE入门学习6:Java基础语法之运算符和语句(上)

继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age的值设置为20.这时候就 须要一个"=",告诉程序须要进行赋值操作. Java 语言中经常使用的运算符可分为例如以下几种:算术运算符,赋值运算符,比較运算符,逻辑运算符,条件运符. (1)算术运算符 算术运算符主要用于进行主要的算术运算.如加法.减法.乘法.除法等. Java 中经常使用的

Java基础——数据类型

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 一.数据类型(八种): 1.计算机的存储进位:位是最小的存储数据单位,以此类推,如图: 2.在java里我们可以使用 0b或者0x表示二进制和十六进 如:0xABC或0b01010001: 3.在java里面数据存储中高位是1 就是负数,高位是0 就是正数: 4.Java数据类型详解: 整数数值:int short:小于32767 byte:小于127 小数