Java基本概念

目录

 

1、Java程序初始化顺序

2、反射

4、注解

5、泛型

6、字节与字符的区别

7、访问修饰符

8、深克隆与浅克隆


1、Java程序初始化顺序

初始化一般遵循3个原则:

  • 静态对象(变量)优先非静态变量,静态变量只初始化一次,而非静态变量可能会多次初始化;
  • 父类优先于子类进行初始化;
  • 按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,他们依然在任何方法被调用之前先初始化。

加载顺序

  • 父类(静态变量,静态语句块)
  • 子类(静态变量,静态语句块)
  • 父类(实例变量,普通语句块)
  • 父类(构造函数)
  • 子类(实例变量,普通语句块)
  • 子类(构造函数)
/**
 * @author King Chen
 * @Date: 2019/3/1 16:02
 */
public class Derived extends Base {
    // 2.子类静态代码块
    static {
        System.out.println("Derived static block!");
    }

    // 5.子类非静态代码块
    {
        System.out.println("Derived block!");
    }

    // 6.子类构造器
    public Derived() {
        System.out.println("Derived constructor!");
    }

    public static void main(String[] args) {
        new Derived();
    }
}

class Base {
    // 1.父类静态代码块
    static {
        System.out.println("Base static block!");
    }

    // 3.父类非静态代码块
    {
        System.out.println("Base block");
    }

    // 4.父类构造器
    public Base() {
        System.out.println("Base constructor!");
    }
}

  输出结果:

Base static block!
Derived static block!
Base block
Base constructor!
Derived block!
Derived constructor!

2、反射

这里我就不多说了,相信大家看了之前发过的帖子就了解啦。Java——反射

4、注解

什么是注解

Annotation是java5开始引入的新特征。提供了一种安全的类似注释的机制,用来将任何信息或元数据与程序元素(类、方法、成员变量等)进行关联。为程序的元素......加上更直观更明了的说明,这些说明信息与程序的业务逻辑无关,而是供给制定的工具或者框架使用。Annotation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数以及本地变量的生命语句中。

Java 注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。

简单来说:注解其实就是代码中的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相对应的处理

为什么要使用注解

传统的方式,我们是通过配置文件 .xml 来告诉类是如何运行的。

有了注解技术以后,我们就可以通过注解告诉类如何运行

例如:我们以前编写 Servlet 的时候,需要在 web.xml 文件配置具体的信息。我们使用了注解以后,可以直接在 Servlet 源代码上,增加注解...Servlet 就被配置到 Tomcat 上了。也就是说,注解可以给类、方法上注入信息。

明显地可以看出,这样是非常直观的,并且 Servlet 规范是推崇这种配置方式的。

如何使用注解

看看这篇文章吧

JDK1.8之Annotation注解一基础篇

工作总结——Aspect注解式切面

5、泛型

泛型类

/**
 * @author King Chen
 * @Date: 2019/3/1 16:52
 */
public class Box<T> {
    private T t;

    public static void main(String[] args) {
        Box<Integer> integerBox = new Box<Integer>();
        Box<String> stringBox = new Box<String>();

        integerBox.add(new Integer(10));
        stringBox.add(new String("菜鸟教程"));

        System.out.printf("整型值为 :%d\n\n", integerBox.get());
        System.out.printf("字符串为 :%s\n", stringBox.get());
    }

    public void add(T t) {
        this.t = t;
    }

    public T get() {
        return t;
    }
}

泛型方法

/**
 * @author King Chen
 * @Date: 2019/3/1 16:53
 */
public class GenericMethodTest {
    // 泛型方法 printArray                         
    public static <E> void printArray(E[] inputArray) {
        // 输出数组元素            
        for (E element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }

    public static void main(String args[]) {
        // 创建不同类型数组: Integer, Double 和 Character
        Integer[] intArray = {1, 2, 3, 4, 5};
        Double[] doubleArray = {1.1, 2.2, 3.3, 4.4};
        Character[] charArray = {'H', 'E', 'L', 'L', 'O'};

        System.out.println("整型数组元素为:");
        printArray(intArray); // 传递一个整型数组

        System.out.println("\n双精度型数组元素为:");
        printArray(doubleArray); // 传递一个双精度型数组

        System.out.println("\n字符型数组元素为:");
        printArray(charArray); // 传递一个字符型数组
    }
}

类型通配符

  1. 类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List<String>List<Integer> 等所有 List<具体类型实参> 的父类。
  2. 类型通配符上限通过形如 List 来定义,如此定义就是通配符泛型值接受 Number 及其下层子类类型。
  3. 类型通配符下限通过形如 List<? super Number> 来定义,表示类型只能接受 Number 及其三层父类类型,如 Objec 类型的实例。

6、字节与字符的区别

总是在说,字节流,字符流,InputStream,reader。。。。。。到底什么是字节,什么是字符?这两个容易混淆的概念,就来准确区分:

类型概念描述举例
字符人们使用的几号,抽象意义上的一个符号'1','a','%',......
字节计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间0x01,0x45,0xFA,......
ANSI字符串在内存中,如果”字符“是以ANSI编码格式存在,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串位ANSI字符串”中文222“(7个字节)
UNICODE字符串在内存中,如果”字符”是以在UNICODE中的序号存在的,那么我们成这种字符串位UNICODE字符串

L”中文222“(10个字节)

 

 

 

 

 

 

 

字节与字符区别

它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:

类型概念描述
ASCII一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为 8 位二进制数,换算为十进制。最小值 0,最大值 255
UTF-8一个英文字符等于一个字节,一个中文(含繁体)等于三个字节
Unicode一个英文等于两个字节,一个中文(含繁体)等于两个字节。符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占 1 个字节的大小,中文句号“。”占 2 个字节的大小
UTF-16一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode扩展区的一些汉字存储需要4个字节)
UTF-32世界上任何字符的存储都需要 4 个字节

 

 

 

 

 

 

 

 

7、访问修饰符

修饰符当前类同 包子 类其他包
public
protected×
default××
private××

×

 

8、深克隆与浅克隆

  • 浅克隆:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所拷贝的对象,而不复制它所引用的对象。

  • 深克隆:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 面向对象的基本特征。 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势, 2、 Java的基本数据类型都有什么?String是基本数据类型吗? 基本数据类型包括int、short、byte、double、boolean、char、long、float String不是基本数据类型,是引用数据类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值