精华内容
下载资源
问答
  • 抽象的构造函数若果在父类(也就是抽象)显示的写了有参数的构造函数,在子类是就必须写一个构造函数来调用父类的构造函数abstract class Person { //定义一个抽象,必须被继承Person(int i) {}}public ...

    1. Java 的构造函数 与初始化块:

    a. 抽象类的构造函数

    若果在父类中(也就是抽象类)中显示的写了有参数的构造函数,在子类是就必须写一个构造函数来调用父类的构造函数

    abstract class Person {   //定义一个抽象类,必须被继承

    Person(int i) {

    }

    }

    public class Student extends Person {

    Student() {

    super(int i)://必须显示的调用父类构造方法//super代表父类对象

    }

    }

    b. 构造函数

    public class Sample{

    // 第一:在这a=1

    static int a

    // 第二:a=2

    static{ a=2;}

    // 第三:a=4

    static{  a=4;}

    public static void main(String[] args)...{

    // 第四:a=4,执行之后a=5

    a++;

    // 第五:a=5

    System.out.println("a="+a);

    }

    }

    引段网友对类的加载及生命周期的说明:

    当类不被用到的时候,什么都不提前加载,

    (1)一旦类被使用到(import时),首先加载的是它的静态变量,然后是静态初始化块,静态方法(不调用时不执行)。

    (2)当此类要被构造一个对象(new 时)的时候,即被new,或者用反射生成其对象的时候,加载其成员部分。依次为成员变量(即非静态变量)、非静态初始化块、非静态方法、最后才是构造器(不创建实例时不执行)。

    成员部分除方法外,每个对象都有其一份副本,其中,非静态方法并不是每个对象都有一个,而是所有对象共享一个副本,这点要注意。

    静态部分一旦被加载,就不会被销毁,直到程序结束,关闭虚拟机。

    非静态的,即,被各个对象所拥有的东西,当对象不被引用时,这个类就结束了他的生命周期。

    但是,它还要在内存中驻留一段时间,等垃圾处理器来将它清除。

    在失去引用后,被垃圾处理前的这段时间,虽然它驻留在内存中,但是没法被再次引用。

    请注意上面说明的加载顺序:

    首先加载 静态变量 然后是静态初始化块,最后是静态方法。

    为了验证这个顺序,将上面的代码稍微改了下,添加了个静态方法。

    如下

    package test1;

    public class ClassLoadTest

    {

    static  int a=2;

    static{ a=3;}

    static{a=4;}

    static void init() {a=10;}

    /** * @param args

    */

    public static void main(String[] args)

    {

    System.out.println("a="+a);//+为连字符

    }

    }

    结果输出为:a=4

    1.构造函数

    (1)任何一个类不管它是抽象的还是具体的,都拥有一个构造函数,即使程序员不键入它,Java也会提供一个默认的无参的构造函数。构造函数必须要与类同名,构造函数一定不能够有返回类型,切记void也是一种返回类型!

    如果在类中没有创建任何构造函数,那么系统将使用默认的构造函数,如果程序员定义了一个构造函数,那么默认的构造函数将不存在!

    public class Book {

    private String id;

    private String title;

    private String author;

    //我们自己定义一个构造函数

    public Book(String idIn,String titleIn,String authorIn){

    id=idIn;

    title=titleIn;

    author=authorIn;

    }

    public String toString(){

    return "The info of the book:\n"+

    "Title:"+title+"\n"+

    "Author:"+author+"\n";

    }

    }

    public class Test {

    public static void main(String[]args){

    //Book book=new Book();    使用默认的构造函数将出现编译错误

    Book book=new Book("0101001","Thinking in Java","Bruce Eckel");

    System.out.println(book);

    }

    }

    (2)构造函数的执行方式:

    首先调用其超类的构造函数,超类构造函数又调用其超类构造函数,直至到达Object构造函数为止,然后Object()构造函数执行,直到所有的构造函数完成

    public class Animal {

    public Animal(){

    System.out.println("This is the animal constructor");

    }

    }

    public class Snake extends Animal{

    public Snake(){

    System.out.println("This is snake constructor");

    }

    }

    public class Cobra extends Snake{

    public Cobra(){

    System.out.println("This is the cobra constructor");

    }

    }

    public class Test {

    public static void main(String[]args){

    new Cobra();

    }

    }

    执行结果:

    This is the animal constructor

    This is snake constructor

    This is the cobra constructor

    (3)默认构造函数是一个无变元的构造函数,隐式的包含了一个对super()的调用

    如果一个子类的超类没有无参的构造函数,那么其子类必须程序员实现构造函数,而无法调用默认的构造函数

    public class Rpg {

    private int hp;

    private int mp;

    private int grade;

    private int exp;

    public Rpg(int hpIn,int mpIn,int gradeIn,int expIn){

    hp=hpIn;

    mp=mpIn;

    grade=gradeIn;

    exp=expIn;

    }

    }

    public class Magician extends Rpg{

    //public Magician(){   不可以使用默认的构造函数!

    //}

    public Magician(int hpIn,int mpIn,int gradeIn,int expIn){

    super(hpIn,mpIn,gradeIn,expIn);

    }

    }

    (4)构造函数可以重载,如果在同一个类中一个构造函数需要调用另一个重载的构造函数,可以使用this(),this()的变元列表决定了调用哪个具体的构造函数

    注意:this()和super()必须出现在构造函数的第一行!!!而且this()和super()函数不能位于同一个构造函数中!!!

    抽象类的构造函数在实例化具体子类时被调用

    接口是没有构造函数的!

    2.初始化块:

    Java类中执行操作的地方有三个:

    构造函数、方法和初始化块

    Java初始化块分为静态初始化块和实例初始化块:

    首次加载类时,会运行一次静态初始化块,每次创建一个新实例时,都会运行一次实例初始化块,类中允许出现多个初始化块,它们所执行的顺序与它们在代码中所出现的顺序相同(程序执行时默认是从上到下的)

    总体的执行顺序:静态初始化块->super()->实例初始化块->构造函数的其它部分,通过一个例子来说明:

    public class Father {

    public Father(){

    System.out.println("This is super class!");

    }

    }

    public class Test extends Father{

    static{

    System.out.println("This is static block!");//静态块

    }

    public Test(){

    System.out.println("This is test constructor");//构造函数

    }

    public static void main(String[]args){

    System.out.println("Hello,Java!");

    Test test=new Test();

    }

    {

    System.out.println("Common init block!");

    }

    }

    上面的例子的输出结果是:

    This is static block!

    Hello,Java!

    This is super class!

    Common init block!

    This is test constructor

    展开全文
  • public class Test4 { @Test public void test(){ child...首先基类中各个变量按照字面顺序进行初始化,然后执行基类的构造函数的其余部分。 5、对子成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。

    public class Test4 {

    @Test

    public void test(){

    child child = new child();

    }

    }

    class parent{

    public static String parentStaticField = "父类静态变量";

    public String parentNormalField ="父类普通变量";

    static {

    System.out.println(parentStaticField);

    System.out.println("父类静态块");

    }

    {

    System.out.println(parentNormalField);

    System.out.println("父类普通块");

    }

    public parent(){

    System.out.println("父类构造方法");

    }

    }

    class child extends parent{

    public static String childStaticField = "子类静态变量";

    public String childNormalField ="子类普通变量";

    static {

    System.out.println(childStaticField);

    System.out.println("子类静态块");

    }

    {

    System.out.println(childNormalField);

    System.out.println("子类普通块");

    }

    public child(){

    System.out.println("子类构造方法");

    }

    }

    输出:

    父类静态变量

    父类静态块

    子类静态变量

    子类静态块

    父类普通变量

    父类普通块

    父类构造方法

    子类普通变量

    子类普通块

    子类构造方法

    执行过程:

    1、当执行到new child时,装载器寻找已经编译的child类的代码(也就是child.class文件)。在装载的过程中,装载器注意到它有一个基类,于是它再装载基类。不管你创不创建基类对象,这个过程总会发生。如果基类还有基类,那么第二个基类也会被装载,依此类推。

    2、执行根基类的static初始化,然后是下一个派生类的static初始化,依此类推。这个顺序非常重要,因为派生类的“static初始化”有可能要依赖基类成员的正确初始化。

    3、当所有必要的类都已经装载结束,创建child类对象。

    4、child类存在父类,则调用父类的构造函数,可以使用super来指定调用哪个构造函数。

    基类的构造过程以及构造顺序,同派生类的相同。首先基类中各个变量按照字面顺序进行初始化,然后执行基类的构造函数的其余部分。

    5、对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。

    展开全文
  • C++,C#,Python等各个编程语言早已经支持lambda表达式了,Javajava8开始也支持Lambda表达式了,其中在java.util.function 包中提供给我们一些最常用的函数式接口。四个最基本的函数式接口Function:R apply(T t) ...

    C++,C#,Python等各个编程语言早已经支持lambda表达式了,Java从java8开始也支持Lambda表达式了,其中在java.util.function 包中提供给我们一些最常用的函数式接口。

    四个最基本的函数式接口

    Function:R apply(T t) 输入类型T返回类型R。

    Consumer:void accept(T t) 输入类型T,“消费”掉,无返回。

    Predicate:boolean test(T t) 输入类型T,并进行条件“判断”,返回true|false。

    Supplier:T get() 无输入,“生产”一个T类型的返回值。

    基本数据类型的函数式接口

    上面的四个接口因为使用泛型,Java泛型不支持基本数据类型,又因为基本数据类型与引用类型频繁的拆装箱将会严重影响效率,所以有Java还提供了几个基本数据类型的函数式接口:

    double类型的函数式接口

    DoubleFunction:R apply(double value);

    DoubleConsumer:void accept(double value);

    DoublePredicate:boolean test(double value);

    DoubleSupplier:double getAsDouble();

    int类型的函数式接口

    IntFunction:R apply(int value);

    IntConsumer:void accept(int value);

    IntPredicate:boolean test(int value);

    IntSupplier:int getAsInt();

    long类型的函数式接口

    LongFunction:R apply(long value);

    LongConsumer:void accept(long value);

    LongPredicate:boolean test(long value);

    LongSupplier:long getAsLong();

    boolean类型的函数式接口

    BooleanSupplier:boolean getAsBoolean();

    二元函数式接口

    BiFunction:R apply(T t, U u);

    BiConsumer:void accept(T t, U u);

    BiPredicate:boolean test(T t, U u);

    Lambda表达式语法

    (int x, int y) -> { return x + y; }

    其中(int x, int y)为参数列表, {return x + y}为函数体,中建用箭头“->”连接起来。下面列举一些示例:

    // 多个参数

    (type1 arg1, type2 arg2...) -> { body }

    (int a, int b) -> { return a + b; }

    // 可以显式声明参数的类型,也可以从上下文推断参数的类型。

    (arg1, arg2...) -> { body }

    (a, b) -> { return a + b; }

    // 一个参数

    (a) -> { return a * a; }

    // 参数列表只有一个参数可以省略:参数列表的小括号

    a -> { return a * a; }

    // 方法体只有一条语句可以省略:方法体大括号以及return关键字

    a -> a * a;

    // 没有参数,需要用一对空括号来表示

    () -> return 1;

    展开全文
  • java中main函数的参数

    2021-03-06 20:21:44
    打印Java 方法参数 首先描述一下具体的需求就是,能不能不... 1.Java中是否存在全局函数?用Java设计程序的基本单位是什么? 2。Java程序的执行从__方法开始。 3。main方法的原型是__。 ...关于JAVA源文件名和main函...

    打印Java 方法参数 首先描述一下具体的需求就是,能不能不需要手动添加代码就能打印 Java 方法所有的参数, 这有些时候在我们调试代码的时候有很重要的帮助。 按照......

    JAVA基础知识汇总!!!非常不错的哦! 1.Java中是否存在全局函数?用Java设计程序的基本单位是什么? 2。Java程序的执行从__方法开始。 3。main方法的原型是__。 ...

    关于JAVA源文件名和main函数入口_计算机软件及应用_IT/计算机_专业资料。关于 JAVA 源文件名和 main 函数入口: 1:一个 JAVA 源文件里最多只有一个公有类 如果......

    关键字:Java 程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!...

    Java中Arraycopy方法参数的使用规则_IT/计算机_专业资料。总结 Arraycopy 方法参数的使用规则 程序代码如下: public class ArrayCopy { public static void main (......

    Java中的静态块、初始化块及main方法_信息与通信_工程科技_专业资料。Ja...

    java 中关于 Integer 和 java 中方法参数传递的几个问题 1 import ng.String; 2 public class Test { 3 public static void main(String[] args) { ......

    这样好了,你在运行的时候加个参数,比如 java test XX。然后在你的main函数里面加这段话:System.out.println("arg is"+args[0]),然后看看输出是什么? 是不......

    Java 试题 1) java 程序中,main 方法的格式正确的是()。 (选择一项) a)static void main(String[] args) b)public void main(String[] args) c)public ......

    重载是 Java 提供的一种多态机制,它允许在同一个类中声明多个名称相同的方法,但这些 方法必须有不同的形式参数列表(参数的个数、类型或顺序不同),这就是方法......

    下面是 2 个测试,分别测试可修改的 Object 和不可修改的 /** * JAVA 里面对象参数的陷阱 */ public class Test { public static void main(String[] args)......

    (T) 8、Java 中类的构造函数只能有一个。 (F ) 9、类的静态变量被该类的所有对象共享。 ( T) 10、不管定义与否,任何类都有一个不带参数的构造方法。 (......

    在 main 方法中创建 Number 类的对象,调用各个方法,并显示计算结果。 9、编写 Java 程序,用于显示人的姓名和年龄。 定义一个人类(Person),该类中应该有两 个......

    启动线程的函数为___。 A. notify() B. run() C. yeild() D. start() 38.下面符号中不属 java 运算符的是___。 A. instanceof(双目运算符) B. ......

    JAVA期末复习试卷含答案_工学_高等教育_教育专区。JAVA期末复习试卷、练习题整理 选择题 1.Java application 中的主类需包含 main 方法,以下哪项是 main 方法的......

    .exe 第二章 java 编程基础 1. java 代码基本格式 java 语言区分大小写 ,程序代码必须写在一个类中 Java 中 main()函数的返回值是 ()。 A、 String B、......

    Java程序设计_计算机软件及应用_IT/计算机_专业资料。java程序设计 单项选择题 1、 对于子类的构造函数说明,下列叙 述中不正确的是()。(1 分) A.子类无条件地......

    CoreJava 部分 1 简述下 java 基本数据类型及所占位数,java 基本数据类型:4 类 8 种 整数类型:byte(1byte),short(2byte),int(4byte),long(8byte) 浮点......

    【练习题】 15.继承: 创建一个名称为 MainPackage 的包, 使它包含 MainClass 和 MainSubClass 类。MainClass 类应当包含变量声明,其值从构造函数中输出。 Main......

    [ys]) } } Java 中的参数传递问题: 基本类型:形式参数的改变对实际参数没有影响 引用类型:形式参数的改变直接影响实际参数 Public static void main(String[] ......

    展开全文
  • Java中函数的重载

    2021-02-12 19:44:40
    函数的重载1、同一个2、同名函数3、参数个数不同或者参数类型不同4、java是严谨性语言,如果函数出现的调用的不确定性,会编译失败。public static int add(int a,int b) //两个整数的和{return a+b;}public ...
  • Java用户自定义函数

    千次阅读 2021-02-25 20:31:15
    用户除了可以使用JavaScript的内置函数之外,还可以自己定义函数。自定义函数有3种方法。使用关键字 function 构造语法:function funcName([param1][,param2...}){statements;}使用 function 构造语法:var result ...
  • //Triangle,用于封装Triangle的属性及功能。package qing;public class Triangle {double sideA,sideB,sideC,area,length;boolean boo;Triangle (){this.sideA = 3;this.sideB = 4;this.sideC = 5;}public ...
  • java继承对构造函数是不继承的,只是调用(隐式或显式)。以下是例子:public class FatherClass {public FatherClass() {System.out.println(100);}public FatherClass(int age) {System.out.println(age);}}public...
  • java计时函数

    2021-03-16 19:52:55
    日期计算器java 11页 免费 日期计算器专用版---......常要求的 的“的成员变量要通过共有函数来操作...春节放假倒计时 还剩6天就要进入春节模式了,文库提前......图 4.13 竖直消去算法图片 1...
  • Java 的JOption函数

    2021-02-25 18:44:44
    (3) 显示OptionDialog: 该种对话框可以由用户自己来设置各个按钮的个数并返回用户点击各个按钮的序号(从0开始计数) Object[] options = {"查询","存款","取款","退出"}; int response=JOptionPane....
  • java 递归函数

    2021-03-06 18:01:47
    一、递归函数,通俗的说就是函数本身自己调用自己...如:n!=n(n-1)!你定义函数f(n)=nf(n-1)而f(n-1)又是这个定义的函数。。这就是递归二、为什么要用递归:递归的目的是简化程序设计,使程序易读三、递归的弊端:尽管...
  • 函数与纯虚函数(C++与Java函数的区别)的深入分析c++虚函数1.定义:在某基类声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数 [1]2.语法:virtual 函数返回类型 函数名(参数表) { 函数体 }3.用途:...
  • 一开始考虑到直接对mongoDB的属性排序,后面发现属性存在内嵌文档,所以处理需要用到聚合函数。思考(key)解决这个问题的过程让我学到很多,发现自己在解决一个问题不仅查找问题的姿势不对,浪费太多时间。而且...
  • java 函数与变量总结

    2021-11-21 22:04:44
    方法的返回值是指我们获取到的某个方法体的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用是接收出结果,使得它可以用于其他的操作! 方法有哪几种类型? 1.无参数无返回值的方法 // 无...
  • java函数式编程入门

    2021-02-28 07:45:27
    以前写过一篇java8的流操作,人们都说流操作是函数式编程,但函数式编程是什么呢?什么是函数式编程什么是函数式编程?它是一种编程范式,即一切都是数学函数函数式编程语言里也可以有对象,但通常这些对象都是...
  • /*********************输入输出*******************///输入字符串 不包括最后的换行符'\n'import java.io.BufferedReader;import java.io.IOException;//输入字符一个charimport java.io.InputStreamReader;// 同...
  • assert函数广泛在java、Python、PHP、C语言存在,都有统一的意义,用业界语言称之为"断言"。最初的出发点都是为了方便调试而设计...简单的概况在各个语言assert函数的意义:如果表达式的值为假,整个程序将退出...
  • 类中各模块的加载顺序这是一篇我当年刚由C#转 Java时候记录的,最近看到有个工龄资深的同事,犯了个类似的错误,所以又把这篇文章翻了出来,改吧改吧,就发出来,大家一起巩固和复习下。一、引言说实话,此部分知识...
  • Java中的split( )函数

    2021-02-12 09:58:23
    首先,我们来了解一下split()函数各个参数的意义public String[] split(String regex, int limit)regex -- 正则表达式分隔符。limit -- 分割的份数。下面就让我们来举个例子String str = "one two three, four";...
  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法)。使用 Lambda 表达式可以使代码变的更加简洁紧凑,在学习Lambda表达式前我们先来思考一下为什么会出现它。1.为什么会出现Lambda表达式首先我们思考...
  • 排名函数是Sql Server2005新增的功能,下面简单介绍一下他们各自的用法和区别。在使用排名函数的时候需要注意以下三点:1、排名函数必须有OVER子句。2、排名函数必须有包含 ORDER BY 的 OVER 子句。3、分组内从1开始...
  • 阅读以下函数说明和Java代码,[说明]现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,...
  • 原标题:Java 的数据流和函数式编程 学习如何使用 Java 8 的流 API 和函数式编程结构。-- Marty Kalin(作者)当 Java SE 8(又名核心 Java 8)在 2014 年被推出时,它引入了一些更改,从根本上影响了用它进行的编程...
  • 这篇文章讲解Java代码的基本执行过程我们先抛开各种JAVA IDE,开发工具,只使用文本编辑器,以突出最本质的东西。在Linux环境下,我们编辑一个文件:vim HelloWorld.java编辑如下代码:1 public classHelloWorld{2 ...
  • Java中的同步

    2021-02-28 18:59:46
    java.util.concurrent.CountDownLatchCountDownLatch会导致一个或多个线程在“门”处等待,直到另一个线程打开此门,此时这些线程可以继续。构造函数CountDownLatch(int count):初始化CountDownLatch实例,将其定义...
  • (25.0分)【单选题】特许连锁总部与门店之间的连接依靠的是:【简答题】请在规定时间内完成 实验一 ,把所有的程序及运行效果解图到实验报告(实验报告一要求在课程资料)【单选题】选址需要考虑的因素不包括【简答...
  • 从原始数据的缓冲区加载。参数:env:JNI 接口指针。loader:分派给所定义的加载器。buf:包含 .class 文件数据的缓冲区。bufLen:缓冲区长度。返回值:返回 Java 对象。如果出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 281,930
精华内容 112,772
关键字:

java类中的各个函数

java 订阅