首页 > 编程语言 >JAVA-基本程序设计结构(类变量、main语法、代码块、final关键字、抽象类)

JAVA-基本程序设计结构(类变量、main语法、代码块、final关键字、抽象类)

时间:2023-09-20 10:55:16浏览次数:44  
标签:调用 JAVA 变量 静态 代码 抽象类 main 方法 final

1.类变量和类方法

1.类变量

1.类变量的定义和语法

1.类变量(静态变量/静态属性/静态字段)是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量

2.定义语法:

  访问修饰符 static 数据类型 变量名; [推荐]

  static 访问修饰符 数据类型 变量名;

3.访问方式:

  类型.类变量名 [推荐]

  对象名.类变量名

 【静态变量的访问修饰符的访问权限和范围与普通的属性是一致的,类变量的访问必须遵守相关的访问权限】

类变量是随着类的加载而创建,所以即使没有创建类的对象实例也可以访问该变量

2.类变量内存模型

 

(1).在JDK7以前,静态变量存放于方法区中的静态域内

(2).在JDK7以后,静态域存储于定义类型的Class对象中,Class对象同堆中的其他对象一样,存在于GC堆中

(3).类在加载时会在堆里面生成一个对应的class对象

3.类变量的注意事项和细节

1.当需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量)

2.类变量是该类的所有对象共享的,而实例变量(普通属性)是每个对象独享的

3.加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量

4.实例变量不能通过 类名.类变量名 方式访问

5.类变量是在类加载时就初始化了,即使没有创建对象,只要类加载了,就可以使用类变量了

6.类变量的声明周期是随着类加载开始,随着类消亡而销毁

2.类方法

1.类方法的定义和语法

1.类方法也叫静态方法。在使用static关键字修饰后,该方法就是静态方法——静态方法可以访问静态属性/变量

2.定义语法:

  访问修饰符 static 数据返回类型 方法名(){ } [推荐]

  static 访问修饰符 数据返回类型 方法名(){ }

3.调用方式:

  类名.类方法名

  对象名.类方法名

【前提是 满足访问修饰符的访问权限和范围】

2.类方法使用场景

当方法中不涉及任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率

开发自己的工具类时,可以将方法做成静态的,方便调用(不用创建对象就可以调用,例如Math类中的方法等)

3.类变量的注意事项和细节

1.类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区

  类方法中无this的参数(不可以使用this)

 

  普通方法中隐含着this的参数(可以使用this),但是在普通方法中无法对类成员使用this

2.类方法可以通过类名调用,也可以通过对象名调用。一般是使用类名调用

  普通方法和对象有关,需要通过对象名调用,不能通过类名调用

3.类方法中不允许使用和对象有关的关键字,比如this和super,普通方法(成员方法)可以

4.类方法(静态方法)中,只能访问 静态变量 或 静态方法

 普通成员方法,既可以访问 普通变量(方法),也可以访问静态变量(访问)

总结:静态方法,只能访问静态的成员(属性和方法),非静态的方法,可以访问静态成员和非静态成员

2.main方法

1.main方法基础理解

1.main 方法是Java虚拟机调用的
2.虚拟机需要调用类的main()方法,所以该方法的访问权限必须为public(虚拟机与main方法不在同一个包(private,默认,proteced均不可以))
3.Java虚拟机在调用main()方法时不必创建对象,所以该方法必须是static
4.该方法接受String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数
5.在编译后,Java 执行的程序 参数1,参数2,参数3 .... (后面所跟参数就是传入String数组的参数)

2.深入理解

1.在main()方法中,我们可以直接调用main方法所在类的静态方法或静态属性

2.但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态变量

3.代码块

1.代码块基础

1.代码块又称初始化块,属于类中的成员[即 是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来

2.代码块和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时或创建对象时隐式调用

3.基本语法:

[修饰符]{
​       代码
};

(1).修饰符 可写可不写,若写只能为static

(2).代码块分两类,使用static修饰的称为静态代码块,没有static修饰的,称为非静态代码块/普通代码块

(3).逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断等)

(4).;(分号)可写可省略

2.代码块深入理解

1.代码块理解

1.代码块:

  (1)相当于另一种形式的构造器(对构造器的补充机制),可以做初始化的操作

 

  (2)场景:如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性

 

2.static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次

 

3.普通的代码块,在创建对象(new 对象)实例时,会被隐式的调用,被创建一次,就会调用一次

   普通代码块,每创建一个对象实例,就会执行一次

 如果只是使用类的静态成员变量,普通代码块并不会执行

2.类的加载

1.创建对象实例时(new)

2.创建子类对象实例,父类也会被加载

3.使用类的静态成员时(静态属性,静态方法)

3.调用顺序

在创建一个对象时,在一个类中的调用顺序时:

1.调用静态代码块和静态属性初始化(静态代码块和静态属性初始化调用的优先级一样。如果有多个静态代码块和多个静态变量初始化,则按它们定义的顺序调用)

2.调用普通代码块和普通属性初始化(普通代码块和普通属性初始化调用的优先级一样。如果有多个普通代码块和多个普通变量初始化,则按它们定义的顺序调用)

3.调用构造方法

  构造器的最前面其实隐含了 super()和调用普通代码块,所以 普通代码块调用顺序优先于构造器。

  静态相关的代码块和属性初始化,在类加载时,就执行完毕了,因此是优先于构造器和普通代码块执行的

class 类名{
    super();
    //调用普通代码块
    代码
}

4.继承关系下调用顺序

1.父类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)

2.子类的静态代码块和静态属性初始化(优先级一样,按定义顺序执行)

3.父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

4.父类的构造方法

5.子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)

6.子类的构造方法

4.final关键字

1.final基础介绍

final 可以修饰类、属性、方法和局部变量

1.当不希望类被继承时,可以用final修饰

2.当不希望父类的某个方法被子类覆盖/重写时,可以用final关键字修饰

3.当不希望类的某个属性的值被修改,可以用final修饰

4.当不希望某个局部变量被修改,可以使用final修饰

2.final深入理解

1.final 修饰的属性又叫常量,一般用 XX_XX_XX来命名

2.final 修饰的属性在定义时,必须赋初值,并且以后不能在修改,赋值可以在如下位置之一

  1.定义时

  2.在构造器中

  3.在代码块中

3.如果 final 修饰的属性是静态的,则初始化位置只能是 定义时或在静态代码块中,不能在构造器中赋值(类加载在调用构造器之前)

4.final 类不能继承,但是可以实例化对象

5.如果类不是final 类,但是含有final 方法,则该方法虽然不能重写,但是可以被继承

6.一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法(已经不会被继承,所以方法不会被重写)

7.final 不能修饰构造方法(即构造器)

8.final 和 static 往往搭配使用,效率更高,不会导致类加载(使类不进行加载),底层编译器做了优化处理

9.包装类(Integer、Double、Float、Boolean等)、String类都是final类

5.抽象类

1.抽象类基础

1.当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类

  抽象方法就是没有实现的方法,没有实现就是指没有方法体,当一个类中存在方法时,需要将该类声明为abstract类(抽象类)

2.用abstract关键字来修饰一个类时,这个类就叫抽象类

访问修饰符 abstract 类名{
       代码
}

3.用abstract关键字来修饰一个方法时,这个方法就是抽象方法

访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体

4.抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()

5.抽象类在框架和设计模式使用较多

2.抽象类深入理解

1.抽象类不能被实例化(不可以被new)

2.抽象类不一定要包含abstract方法,也就是说,抽象类可以没有abstract方法

3.一旦类包含了abstract方法,那么这个类必须声明为abstract类

4.abstract 只能修饰类和方法,不能修饰属性和其他

5.抽象类可以有任意成员(抽象类本质上还是一个类) 比如:非抽象方法、构造器、静态属性等等

6.抽象方法不能有主体,即不能实现。

7.如果一个类继承了抽象类,则他必须实现抽象类的所有抽象方法,除非他自己也声明为abstract类

只要有了方法体,就是实现了方法,无论方法体内是否有内容

8.抽象方法不能使用private、final 和 static 来修饰的,因为这些关键字都是和重写相违背的

 

标签:调用,JAVA,变量,静态,代码,抽象类,main,方法,final
From: https://www.cnblogs.com/yzr-zy/p/17715714.html

相关文章

  • java中string与byte[]的转换
    1.string转byte[]byte[]midbytes=isoString.getBytes("UTF8");//为UTF8编码byte[]isoret=srt2.getBytes("ISO-8859-1");ISO-8859-1编码ISO-8859-1为单字节的编码2.byte[]转stringStringisoString=newString(byte......
  • group by 用java代码实现
    importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;publicclassListGroup{publicstaticvoidmain(String[]args){List<JavaBean>list=newArrayList<JavaB......
  • java日期操作
    将Date类型写入数据库的两种方法先了解几个类: 1、具体类(和抽象类相对)java.util.Date 2、抽象类java.text.DateFormat和它的一个具体子类,java.text.SimpleDateFormat 3、抽象类java.util.Calendar和它的一个具体子类,java.util.GregorianCalendar......
  • Java验证电子邮箱地址、电话号码
    demo1:/***本类用于处理、检查导入数据的格式*@authorAdministrator*weiwenshuai20110915*/publicclassCheckData{/***验证手机号码、电话号码是否有效*手机号前面加86的情况也考虑*新联通*(中国联通+中国网通)手机号码开头数字130、1......
  • 66基于java的志愿者服务管理系统设计与实现(配套lun文,PPT,可参考做毕业设计)
    本章节给大家带来一个基于java志愿者服务管理系统设计与实现,可适用于校园志愿者活动服务平台,校园爱心志愿者活动,爱心活动管理信息系统,大学志愿者服务平台,大学生志愿者服务平台,大学生爱心活动系统,在线志愿者活动平台,校园志愿者活动,大学志愿者活动平台等等;引言现如今,校园志愿者......
  • java将map的key转为大写
    普通的stream流,toMap方法会调用merge方法,该方法如果value传值为null的时候,会报空指针异常,因此直接使用collect()方法进行规约操作publicstaticvoidmain(String[]args){Map<String,String>testMap=newHashMap<>();testMap.put("apple",null);testMap.put("......
  • 十大排序算法总结及其Java代码实现
    概述基于比较的排序算法,常见的有以下几种算法最好最坏平均空间稳定性思想注意事项冒泡排序O(n)O(n^2)O(n^2)O(1)是比较最好情况需要额外判断选择排序O(n^2)O(n^2)O(n^2)O(1)否比较顺序选择元素,交换次数较多,不适合大规模数据堆排序O(nlogn)O(nlogn)O(nlogn)O(1)否选择需要使用到数据......
  • Java连接phoenix问题
    这个错误的原因是找不到文件,所以要在本地配置一下hadoop的环境变量下载将其中hadoop这个文件放在c盘windows下system32目录下就ok了 ......
  • 基于java的学生课程管理系统-计算机毕业设计源码+LW文档
    计算机技术的发展,改变了的生产生活方式。在高校,越来越多的教务管理使用管理系统进行管理,用来提高管理效率。在传统的教学管理中,高校往往通过大量的人力和物力进行管理,通过手工记录课程信息,统计科目资料。传统的管理方法容易出错,而学生课程管理系统可以帮助教师管理课程信息,查看课程......
  • 基于java的高校智慧课堂管理系统的设计与实现-计算机毕业设计源码+LW文档
    一、研究的背景和意义研究背景:随着计算机网络技术和互联网技术的飞速发展,社会的快速进步和人们生活质量的不断提高,人们的文化生活受到了极大的变化。而我们国家的教育也在随着社会的发展发生巨大的改变。在计算机技术的飞速发展前提下,特别是智能Android操作系统的问世,基于移动设......