前言:普通函数与构造函数的区别。
初学者没有必要了解太深,请住以下四点,能分辩出来就行了,后面用到了,自然就明白为什么要用构造函数了,如果初期想搞明白,只是概念上的,没有什么意义:
1、构造函数的方法名与类名相同(普通函数可以随便起名)
2、构造函数没有返回值,因此,既没有void,也没有return。
3、调用时,需要先用new声明一下,如:books book=new books();
3、如果非要弄明白:为什么要使用构造函数?你就把【构造函数】当成某个类的一组【静态变量】吧。比如:我们如果在程序中想定义一组变量书的变量,会这样给变量起名:book_Name="三国演义",book_page="350",book_color=”红色“。如果用构造函数就是定义一个book类,那么构造函数就是定义变量,只不过就是把【_】变成【.】了,book.Name。(这种比喻也不恰当,有点误人子弟了,不过,水平有限!)
补充:构造函数会用到哪儿?还有一个比喻,就是您应该用过手机APP吧,当你想退出APP时,都会用到一个【设置】页面,那个【页面】的选项就很很适合用【构造函数】。
一、函数的参数传递实例。
package HELLO;
import java.util.Scanner;
import javax.print.DocFlavor.INPUT_STREAM;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction;
public class helloword
{
public static int Max(int a,int b) // a和b对应的就是x,y传过来的值。
{
int c=0;
if(a>b)
{c=a;}
else
{
c=b;
}
return c; // 函数返回值或者叫输出值
}
public static void main(String[] args)
{
int x=9;
int y=6;
int z=Max(x, y); // 调用函数,把x和y的值传入到函数max中的a和b,再获取到C的值给Z。
System.out.println(x+"和"+y+"中,两者最大的值是:"+z);
}
}
二、【同一个包下】调用另一个类的【函数】。
1、【包】的名称是【HELLO】,也就是两个java文件都在HELLO文件夹下,并且,代码第一行都是package HELLO;
2、csj.java文件代码。
package HELLO;
public class csj {
public static int Max(int a,int b) // a和b对应的就是x,y传过来的值。
{
int c=0;
if(a>b)
{c=a;}
else
{
c=b;
}
return c; // 函数返回值或者叫输出值
}
public static void main(String[] args) {
}
}
3、helloword.java代码。
package HELLO;
import java.util.Scanner;
public class helloword
{
public static void main(String[] args)
{
int x=9;
int y=6;
csj h=new csj(); // 先从csj.java类中建立一个对象【h】,说白了就是建立一个关联,。
int z=h.Max(x, y); // 通过【h.】来调用csj.java中的max函数。
System.out.println(x+"和"+y+"中,两者最大的值是:"+z);
}
}
三、【不在同一个包下】调用另一个类的【函数】。
1、我先截个图(为了更好的理解)。
2、【包】的名称是【love】下的csj.java文件代码。
package love;
public class csj {
public static int Max(int a,int b) // a和b对应的就是x,y传过来的值。
{
int c=0;
if(a>b)
{c=a;}
else
{
c=b;
}
return c; // 函数返回值或者叫输出值
}
public static void main(String[] args) {
}
}
、【包】的名称是【HELLO】下的helloword.java文件代码。
package HELLO;
import java.util.Scanner;
import love.csj; // 导入包名和类名,记得中间有.
public class helloword
{
public static void main(String[] args)
{
int x=9;
int y=6;
csj h=new csj(); // 先从csj.java类中建立一个对象【h】,说白了就是建立一个关联,。
int z=h.Max(x, y); // 通过【h.】来调用csj.java中的max函数。
System.out.println(x+"和"+y+"中,两者最大的值是:"+z);
}
}
四、调用类的【构造函数】- 调用类时的参数传递和接收。
特点:只要运行类,就执行,而且,只要实例化对象(book aaa=new book();)就执行了。
1、先放一个图。
2、show_2.java代码
package Show;
public class Show_2 {
private int a = 0; // 就是一个变量,用private,不会造成数据泄露。
private int b = 0; // private定义私有变量b,不会造成数据泄露。
// ============= 【构造函数 - 接收传参】 ,b就是获取传过来的值。
public Show_2(int b)
{
this.b = b; // 就是把传过来的值,赋给变量b
}
// ============= 【函数 -每执行一次,变量就+1】
public void add()
{
a++; // 变量+1
// 下面这个b的值,就是show_1.java中传过来的【10】,Show_2 ccc = new Show_2(10);
if(a == b)
{
a = 0;
}
}
public int getvalue()
{
return a;
}
public static void main(String[] args) {}
}
3、show_1.java代码
package Show;
public class Show_1 {
public static void main(String[] args) {
Show_2 ccc = new Show_2(10); // 用ccc对象关联到show_2类。注意,10就是传给了show_1类中的b变量。
// ==============【做了一个循环】
while (true) {
// =====[这段代码是有1秒的暂停]
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
ccc.add(); // 执行show_2类中的add函数,+1.
System.out.println(ccc.getvalue());
}
}
}
// 本程序的执行结果是,从0到9显示,每隔一秒显示一个数字,到9后,接着从0开始。
五、调用类的【构造函数】- 批量,让系统自动加上构造函数。
六、在MyEclipse中自动创建或快速生成【构造函数】的get 和set方法。
首先,用private定义私有变量,如:
private int id;
private String name;
private String old;
方法1:点击右键,选择source,再选择Generate Getters and Setters,再选择select all,点OK就行了。
方法2:快捷键:Shift+Alt +S ,后面的跟方法1一样。
注意:如果生成的方法在private 变量前面,首先检查光标是否在private变量的后面一行,再检查弹出设置框 insertion point,其中的after就是放在哪个后面,如: after old,就是放在old变量后面,选择一下就行了。