课后习题总结
1. final关键字的作用
final可修饰类、类属性和类方法
- 被final关键字修饰的类不能被继承,即最终类;
- 被final关键字修饰的方法不能被子类重写
- 被final关键字修饰的属性,子类就不能给他重新赋值了,如果重新赋值,会报错
2. static关键字的作用
- 为特定数据类型或对象分配单一的存贮空间,而与创建对象的个数无关。
- 希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过类来直接调用方法或使用类的属性。
static可以用来修饰成员变量、成员方法、静态块、静态导包 - 被static修饰的成员变量是静态变量,反之为实例变量
- 静态变量属于类,在内存中只有一个副本(所有实例都指向同一个内存地址)。只要静态变量所在的类被加载,这个静态类就会被分配空间,因此就可以被使用。对静态变量的引用有两种方式,分别为“类.静态变量”和“对象.静态变量”。
- 实例变量属于对象,只有对象被创建后,实例变量才会被分配空间,才能被使用,他在内存中存在多个副本,只能用“对象.静态变量”的方式来引用。
- 静态变量只有一个,被类所拥有,所有的对象都共享这个静态变量,而实例对象与具体对象有关。
- 被static修饰的方法是类的方法,不需要创建对象就可以使用,反之是对象的方法,只有对象创建出来后才可以被使用
- static 方法中不能使用this和super关键字,不能调用对象的非static方法,只能访问所属类的静态成员变量和成员方法,因为当static方法被调用的时候,这个类的对象可能还没有被创建,即使已经被创建,也无法确定调用哪个对象的方法。同理static方法也不能访问对象的非static类型的变量。
- 被static修饰的代码块
- static代码块在类中是独立与成员变量和成员函数的代码块,他不在任何一个方法体内,JVM在加载里的时候会执行static代码块,如果有多个static代码块,JVM将会按顺序来执行,static代码块经常会被用来初始化静态变量,需要注意的是static代码块只会被执行一次
- 被static修饰的内部类
- static内部类是指被申明为static的内部类,他可以不依赖于外部类实例对象而被实例化,而通常的内部类需要外部类实例化后才能实例化。静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态成员方法,只有内部类才能被申明为static。
3.extends和implements分别是做什么用的,有什么区别?
- extends 是继承类
- 子类继承父类就会拥有父类的全部方法;
- 继承之后可以使用父类的方法, 也可以重写父类的方法;
- 子类不会覆盖父类的属性方法,用this调用的对象是子类的属性和方法,用super调用的是父类的属性方法;
- 父类不能是声明为final或定义为abstract的类;
- 只能继承一个类,每代单传,可四世同堂
- implements 是实现接口
- 接口的方法一般为空, 必须重写才能使用;
- 接口里面可以有属性,但一般不这么用,属性被规定的public static final修饰后只能是**静态常量 **;
- 可实现多个接口,使用时用逗号分开:
class A extends B implements C,D,E; - 实现一个接口就实现了该接口的所有的方法,但是可以只重写某个(抽象类除外,不是接口),;
- 接口中的方法都是抽象的;
- 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
4.java为什么是跨平台的?
Java程序编译之后的代码不是被硬件系统直接运行的代码,而是一种“中间码”——字节码“.class”。然后不同的硬件平台上(unix,windows,linux)安装有不同的Java虚拟机(JVM),由不同的JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。
5.java和.class的作用和区别?
- java文件就是这样一个未经编译的源程序,一般是给程序员看的。
- class文件就是被编译器编译过的java文件,通常是给计算机看的。
6.虚拟机和解释器的关系?
Java是先编译成字节码再执行。Java虚拟机就是字节码运行的环境,通过Java虚拟机可以实现平台无关性,而Java解释器是将字节码解释为操作系统可以理解的原语执行。
Java解释器是虚拟机的实现。
7.用代码表示byte,short,int,long存储所占字节数,最大值和最小值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(byte).Name, sizeof(byte), byte.MinValue, byte.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(sbyte).Name, sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(short).Name, sizeof(short), short.MinValue, short.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(ushort).Name, sizeof(ushort), ushort.MinValue, ushort.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(int).Name, sizeof(int), int.MinValue, int.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(uint).Name, sizeof(uint), uint.MinValue, uint.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(long).Name, sizeof(long), long.MinValue, long.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(ulong).Name, sizeof(ulong), ulong.MinValue, ulong.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(float).Name, sizeof(float), float.MinValue, float.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(double).Name, sizeof(double), double.MinValue, double.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(decimal).Name, sizeof(decimal), decimal.MinValue, decimal.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t\n",
typeof(bool).Name, sizeof(bool));
Console.WriteLine("{0}:\t 所占字节数: {1}\t 最小值:{2}\t 最大值:{3}\n",
typeof(char).Name, sizeof(char), char.MinValue, char.MaxValue);
Console.WriteLine("{0}:\t 所占字节数: {1}\t ",
typeof(IntPtr).Name, IntPtr.Size);
Console.ReadLine();
}
}
}
8.int和integer的区别?
int 是我们常说的整形数字,是 Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。
Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java 可以根据上下文,自动进行转换,极大地简化了相关编程。