java 基础之语法关键词的使用

1.super和this的使用

  1.1:super表示父类对象,this表示当前对象

  1.2:super()或this()必须放在构造方法中的第一行,因为系统没有在第一行发现this()或super()调用,就会自动加上super()

  1.3:static中不能使用supe或this修饰,因为static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象

2.static的使用

  2.1:static可以修饰内部类、成员、代码块、方法

    2.1.1加载顺序:静态属性-静态代码块-非静态属性-构造方法

    2.1.2特点:随着类的加载而加载,只加载一次

    2.1.3:static中不能使用supe或this修饰,不能和abstract使用

  2.2:含有静态方法的内部类必须是静态内部类

  2.3:静态变量可以为 类变量(与对象无关),而 实例变量则属于一个特定的对象。

    2.3.1:静态变量是 基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用

    2.3.2:静态变量是一个 引用。由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。

  2.4:静态代码块主要用于类的初始化。

    特点:1.随着类的加载而执行;

         2.静态代码块只能定义在类里面,不能定义在方法里;

       3.静态代码块里的变量都是局部变量,只在块内有效;

      4. 静态代码块只能访问类的静态成员,而不允许访问实例成员

       5.一个类中可以定义多个静态代码块,按顺序执行。

  2.5:静态方法:与 类变量(静态变量) 不同,方法(静态方法与实例方法)在内存中只有一份,无论该类有多少个实例,都共用一个方法。

    特点:1.静态方法可以直接使用,而 实例方法必须在类实例化之后通过对象来调用;

       2.在外部调用静态方法时,可以使用“类名.方法名”或者“对象名.方法名”的形式。实例方法只能使用后面这种方式;

       3.静态方法只允许访问静态成员。而实例方法中可以访问静态成员和实例成员;

       4.4.静态方法中不能使用this(因为this是与实例相关的); 

    下面这段代码的输出结果是什么?

public class Test extends Base{

    static{
        System.out.println("test static");
    }

    public Test(){
        System.out.println("test constructor");
    }

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

class Base{

    static{
        System.out.println("base static");
    }

    public Base(){
        System.out.println("base constructor");
    }
}

base static
test static
base constructor
test constructor

结果

在执行开始,先要寻找到main方法,因为main方法是程序的入口,但是在执行main方法之前,必须先加载Test类,而在加载Test类的时候发现Test类继承自Base类,因此会转去先加载Base类,在加载Base类的时候,发现有static块,便执行了static块。在Base类加载完成之后,便继续加载Test类,然后发现Test类中也有static块,便执行static块。在加载完所需的类之后,便开始执行main方法。在main方法中执行new Test()的时候会先调用父类的构造器,然后再调用自身的构造器。

解析

这段代码的输出结果是什么
public class Test {
    Person person = new Person("Test");
    static{
        System.out.println("test static");
    }

    public Test() {
        System.out.println("test constructor");
    }

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

class Person{
    static{
        System.out.println("person static");
    }
    public Person(String str) {
        System.out.println("person "+str);
    }
}

class MyClass extends Test {
    Person person = new Person("MyClass");
    static{
        System.out.println("myclass static");
    }

    public MyClass() {
        System.out.println("myclass constructor");
    }
}

结果:
test static
myclass static
person static
person Test
test constructor
person MyClass
myclass constructor

解析:
首先加载Test类,因此会执行Test类中的static块。接着执行new MyClass(),而MyClass类还没有被加载,因此需要加载MyClass类。在加载MyClass类的时候,发现MyClass类继承自Test类,但是由于Test类已经被加载了,所以只需要加载MyClass类,那么就会执行MyClass类的中的static块。在加载完之后,就通过构造器来生成对象。而在生成对象的时候,必须先初始化父类的成员变量,因此会执行Test中的Person person = new Person(),而Person类还没有被加载过,因此会先加载Person类并执行Person类中的static块,接着执行父类的构造器,完成了父类的初始化,然后就来初始化自身了,因此会接着执行MyClass中的Person person = new Person(),最后执行MyClass的构造器

3.final 的使用:

  3.1:它可以修饰非抽象类、非抽象类成员方法和变量,不能和abstract一起使用。

  3.2:特点:

    3.2.1:final类不能被继承,没有子类,final类中的方法默认是final的。

    3.2.2:final方法不能被子类的方法覆盖,但可以被继承。

    3.2.3:final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final空白,必须在初始化对象的时候赋初值

    3.2.4:final不能用于修饰构造方法。

    3.2.5:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

4.abstract的使用:

  4.1:可以修饰类和方法,不能修饰成员

  4.2:特点:

    4.2.1:不能与static 、final、private使用

    4.2.2:抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。

    4.2.3:抽象类中可以包含构造方法, 但是构造方法不能被声明为抽象。

  4.3:抽象类与接口的区别:

    4.3.1:一个类可以实现任意多个接口,但最多只能作为一个抽象类的子类。

    4.3.2:抽象类中可以有一般方法,而接口中:所有的方法都是是抽象的。

         抽象类中的修饰符可以为public、protected、无修饰符(表示包内可见),而接口只能是public、无修饰符

    4.3.3:抽象类可以有构造方法,而接口不能

    4.3.4:接口声明变量时必须被初始化

5.public、protect、private区别:

    

6.synchronized的用法:

  

 

    

时间: 2024-10-10 18:27:37

java 基础之语法关键词的使用的相关文章

java 基础之语法注意事项

1.方法中语句不能使用static 修饰,因为方法是放在代码区中,static放在数据区中, JVM内存总体一共分为了4个部分(stack segment.heap segment.code segment.data segment) 当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中: 当new 一个对象的时候,此对象放在了heap segment(堆)当中: 而static 的变量或者字符串常量 则存在在 data segment(数据区)中: 那

黑马程序员——Java基础语法(二)---流程控制

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本文主要介绍java基础语法中的流程控制,流程控制是我们写出灵活代码的基础.常见的流程控制主要有四类:判断结构.选择结构.循环结构.其他控制结构 一.判断结构 判断结构的标志是if语句,if语句主要有三种表现形式: 1.if(条件表达式) { 执行语句 } 注意: 1.如果if语句中只有一条语句,那么可以不写大括号.不过初学者一定要写括号,以免出错. 2.如果if语句没写大括号,if就只能控制

Java基础语法

Java的基础语法中包含字符集.标识符和关键字.变量和常量.语句.注释.运算符和表达式这些基本要素. 一.关键字 编程语言都有一些保留的单词,用于定义该语言,这些单词对于编译器有特殊含义,不能作为标识符使用: Java中的true.false.null这三个保留字,不能作为标识符使用,对于编译器有特殊含义: main是一个用于描述Java程序开始方法的特殊名称,它不是一个关键字: abstract 抽象 boolean 逻辑运算: 布尔 break 打破: 断开 byte 字节: case 例,

java 基础语法

第一周接触java基础语法,上课听得头痛,还是半懂不懂,放学后讲的啥子都忘了. 这是老师给的周末作业: 1.输入长与宽计算长方形面积与周长.(用精度类型计算)2.输入一个学生三科成绩,计算平均分.3.输入int型市场价格,购买价格,计算差额,差额显示为单精度浮点型.4.42页第二,计算房贷那道题.5.输入一个学生成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示.6.题目:输入三个整数x,y,z,请把这三个数由小到大输出.程序分析:我们想办法把最小的数放到x

Java基础语法1

                         Java基础语法(1)知识点目录 1:关键字 (1)定义 (2)特点 (3)注意事项 2:标识符 (1)定义 (2)组成规则 (3)注意事项 (4)常见的命名规则(见名知意) A:包 单级包 多级包 B:类或者接口 一个单词 多个单词 C:方法或者变量 一个单词 多个单词 D:常量 全部大写 一个单词 多个单词 3:注释 (1)定义 (2)分类 A:单行注释 B:多行注释 C:文档注释 (3)注释的作用 4:常量 (1)定义 (2)分类 A:字面

JavaSE入门学习7:Java基础语法之语句(下)

继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for. (5)Java循环语句之while 语法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 运行

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

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

黑马程序员——Java基础语法(一) --- 关键字、标识符、注释、常量和变量、运算符

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 本篇博文主要总结java的基础语法,主要的内容包括:关键字.标识符.注释.常量和变量.运算符几部分. 一.关键字 关键字是被Java语言赋予了特殊含义的单词.关键字中所有的字母都是小写. java中的关键字主要包括如下几部分: 1.用于定

程序猿二三事之Java基础--Java SE 5增加的特性--语法篇(一)

程序猿二三事之Java基础–Java SE 5增加的特性–语法篇(一) [ TOC ] 为什么是Java SE 5? 目前已经到了JDK-8u74了,JDK7的主版本已经于2015年4月停止公开更新. 那为什么还要来说Java/JDK5呢? Java SE在1.4(2002)趋于成熟,随着越来越多应用于开发企业应用,许多框架诞生于这个时期或走向成熟. Java SE 5.0的发布(2004)在语法层面增加了很多特性,让开发更高效,代码更整洁. 自动装箱/拆箱.泛型.注解.for循环增强.枚举.可