写点什么

Java 中的初始化与清理,kafka 参数调优

  • 2021 年 11 月 10 日
  • 本文字数:2361 字

    阅读完需:约 8 分钟

}


public class Thinking_test {


public static void main(String []args){


for(int i=0;i<5;i++){


new Test();


}


}


}


Output:


初始化...


初始化...


初始化...


初始化...


初始化...


每当我们创建对象(new Test();)时,将会为对象分配存储空间,并调用相应的构造器,这样就保证了在操作对象之前,对象已经被初始化了。


不接受任何参数的构造器叫做默认构造器(无参构造器),当编写一个类时,如果你的类中没有构造器,那么编译器会自动帮你创建一个这样类型的构造器。同样构造器也是可以带有参数的,在构造器中带有参数可以方便我们指定如何创建对象。


例:


class Test{


Test(int i){


System.out.println("初始化"+i+"...");


}


}


public class Thinking_test {


public static void main(String []args){


for(int i=0;i<5;i++){


new Test(i);


}


}


}


Output:


初始化 0...


初始化 1...


初始化 2...


初始化 3...


初始化 4...


值得注意的是,如果 Test(int i)是 Test 类中唯一的构造器,那么编译器将不会允许你以其他任何方式创建 Test 对象。


重载




在同一个类里可以有多个同名函数,但是每一个同名函数都有着独一无二的参数类型列表,这样我们就可以通过不同的参数组合调用同一个名字的参数,这种形式叫方法重载


class Tree{


int height;


Tree(){


System.out.println("播种");


}


Tree(int initHeight){


height=initHeight;


System.out.println("种植一棵"+initHeight+"米的数");


}


void info(){


System.out.println("树的高度是"+height+"米");


}


void info(String s){


System.out.println(s+": 树的高度是"+height+"米");


}


}


public class Thinking_03_test1 {


public static void main(String []args){


Tree t=new Tree(10);


t.info();


t.info("重载方法");


new Tree();


}


}


Output:


种植一棵 10 米的数


树的高度是 10 米


重载方法: 树的高度是 10 米


播种


重载之后,如果传入的实参类型并非任意一个重载函数需要的类型,但经过非窄化转换仍能匹配所有的重载函数需要的参数类型,这个参数就会类型提升为更接近它的那一个函数需要的参数类型,参与运算。


this 关键字




假设你希望在方法内部获得当前对象的引用,就可以使用 this 关键字, this 关键字只能在方法内部使用,代表当前函数所属对象的一个引用。


3.1 在构造器中调用构造器:


在一个构造器中调用另一个构造器,必须使用this(构造器参数);的形式,一个构造器中只能通过这种方法调用一次别的构造器,且这个调用要放在函数最开始。


注意:除构造器外,编译器禁止其他任何方法中调用构造器


例:


class Flower{


int petalCount =0;


String s ="初始化";


Flower(){


this("hi",47);


System.out.println("无参构造函数");


}


Flower(int petals){


petalCount=petals;


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


}


Flower(String ss){


s=ss;


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


}


Flower(String s,int petals){


this(petals);


this.s=s;//this()不能出现两次


System.out.println("字符串和数字");


}


void printPetalCount(){


System.out.println("petalCount="+petalCount+",s="+s);


}


}


public class Thinking_03_test1 {


public static void main(String []args){


Flower x=new Flower();


x.printPetalCount();


}


}


Output:


petalCount=47


字符串和数字


无参构造函数


petalCount=47,s=hi


this 还有另一种用法。当参数与数据成员名字相同时,使用(this.名称)表示数据成员。


3.2 static 方法:


static 方法就是没有 this 的方法,static 方法不需要实例化,其在 JVM 刚加载的时候就编译过了。在程序的运行过程中随时可以调用,不需要去实例化某个对象然后再去调用,可以直接用类名去调用,直到结束释放内存,且静态方法内部只能调用类静态变量,不能调用非静态方法,且任意一个对象对静态方法进行修改,其他调用该静态方法也会相应修改


初始化




4.1 成员初始化


Java 尽力保证:所有变量在使用前都得到恰当的初始化。对于方法的局部变量,Java 以编译时错误的形式来贯彻这种保


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


证。


如:


void test(){


int i;


i++;


}


就会得到一条错误信息(i not initialized),来告诉你 i 没有初始化。当然对于基本数据类型的数据成员,编译器会为这些成员赋一个默认值。如果我们在定义一个对象的引用时,不将其初始化,此引用就会获得一个特殊值 null。


如果我们想为某个变量初始化,可以使用直接提供初值的方式,如:


boolean bool=false;


char ch='x';


int i=100;


double d=3.14;


同样对于类(以 Test 类为例)可以像下面这样创建一个对象并初始化它:


Test t=new Test();


4.2 数组初始化


数组只是相同类型的,用一个标识符号名称封装到一起的一个对象序列或基本类型序列,数组是通过方括号下标操作符[ ]来定义和使用的。其定义的方法为:int [] al;int al [];


数组的初始化方式主要包括一下几种:


1.静态初始化 1:


数据类型 [ ] 数组名称 = {元素1,元素2,元素3…}


2.静态初始化 2:


数据类型 [ ] 数组名称 = new 数据类型[ ]{元素1,元素2,元素3…}


3.动态初始化:


数据类型 [ ] 数组名称 = new 数据类型[数组长度]


所有数组都有一个固有成员,可以通过它获知数组中含有多少个元素,这个成员就是 length


数组对象有一个叫做 toString 的方法,这个方法不需要参数,可以产生一维数组的可打印版本(字符串)。


注意:


当我们使用:int [] arr2=arr1;时,其意义并不是复制数组 arr1 到数组 arr2,这样做到的只是复制了一个引用,例:


public class Thinking_test {


public static void main(String []args){


int[] arr1={1,2,3,4,5};


int[] arr2=arr1;


for(int i=0;i<arr2.length;i++){


arr2[i]=arr2[i]+1;


}


System.out.println("arr1="+Arrays.toString(arr1));


System.out.println("arr2="+Arrays.toString(arr2));


}


}


Output:


arr1=[2, 3, 4, 5, 6]


arr2=[2, 3, 4, 5, 6]


垃圾回收




想要了解垃圾回收首先我们应该知道以下几点:

评论

发布
暂无评论
Java中的初始化与清理,kafka参数调优