构造器:
在创建对象时,对对象进行初始化操作,绝大多数情况是对于属性初始化赋值
特点:
1.方法名和类完全一致
2.无返回值类型 连void也没有
3.它只在创建对象的时候调用一次,不可以像普通方法随意调用
方法的重载以及package、import的用法
1 package com.atguigu.javase.javabean;// package 机构类型.机构名称.项目名称.模块名称; 2 //package aaa.bbb.ccc; //告诉编译器Computer类编译成.class文件后,保存到哪个包目录下. 3 // 如果代码中有package语句,则必须使用选项-d(directory)进行编译 4 // 一旦源文件中包含package语句,这个类的类名就必须包含完整包名(类的限定名称) 5 // aaa.bbb.ccc.Computer 6 // 写一个类Computer 7 // cpu,内存,磁盘,相应的get/set方法 8 // 提供2-3个构造器 9 // 提供一个getDetails()方法,返回String 10 public class Computer { 11 12 private double cpu; 13 private int memory; 14 private int disk; 15 16 public Computer() { 17 /* 18 cpu = 1.0; 19 memory = 1; 20 disk = 100;*/ 21 //System.out.println("Computer()..."); //这样写不可以,它必须在有效行的第一行 22 // 可以通过一个间接的重载构造器的调用,实现三个属性的同时初始化 23 this(1.0); 24 System.out.println("Computer()..."); 25 } 26 27 public Computer(double cpu) { 28 /* 29 this.cpu = cpu; 30 memory = 1; 31 disk = 100;*/ 32 this(cpu, 1); 33 System.out.println("Computer(double)..."); 34 } 35 36 public Computer(double cpu, int memory) { 37 /* 38 this.cpu = cpu; 39 this.memory = memory; 40 disk = 100;*/ 41 this(cpu, memory, 100); //一行的调用相当于上面的三行 42 System.out.println("Computer(double, int)..."); 43 } 44 45 public Computer(double cpu, int memory, int disk) { 46 //this(); 这样会形成死循环,导致方法无限压栈,最终栈溢出 47 this.cpu = cpu; 48 this.memory = memory; 49 this.disk = disk; 50 System.out.println("Computer(double,int,int)..."); 51 } 52 53 public void setCpu(double cpu) { 54 this.cpu = cpu; 55 } 56 57 public double getCpu() { 58 return cpu; 59 } 60 61 public void setMemory(int memory) { 62 this.memory = memory; 63 } 64 65 public int getMemory() { 66 return memory; 67 } 68 69 public void setDisk(int disk) { 70 this.disk = disk; 71 } 72 73 public int getDisk() { 74 return disk; 75 } 76 77 public String getDetails() { 78 return "CPU:" + this.getCpu() + "GHz,内存:" + this.getMemory() + "G,硬盘:" + this.getDisk() + "G"; 79 } 80 81 }
1 package com.atguigu.javase.test; 2 3 // 告诉编译器,当前类中要使用的其他包中的类的路径 4 import com.atguigu.javase.javabean.Computer; 5 6 // 写一个测试类,调用不同的构造器,创建多个对象并打印输出 7 public class ComputerTest { 8 9 public static void main(String[] args) { 10 //当类中有import语句时,下面的限定名称就不必使用了 11 //com.atguigu.javase.javabean.Computer c1 = new com.atguigu.javase.javabean.Computer(); //必须使用限定名称,因为Computer类被包管理 12 Computer c1 = new Computer(); //不必使用限定名称,因为Computer类已经被导入了. 13 14 System.out.println(c1.getDetails()); 15 /* 16 Computer c2 = new Computer(2.0); 17 System.out.println(c2.getDetails()); 18 Computer c3 = new Computer(3.0, 2); 19 System.out.println(c3.getDetails()); 20 Computer c4 = new Computer(4.0, 4, 400); 21 System.out.println(c4.getDetails()); 22 */ 23 } 24 25 }
数组以及for循环的搭配使用
1 package com.atguigu.test; 2 3 public class CharTest { 4 /* 5 创建一个char型数组36个元素, 6 前26个保存大写字母,后10个保存0-9数字字符 7 打印输出 8 */ 9 public static void main(String[] args) { 10 char[] c = new char[36]; 11 for(int i = 0; i < 26; i++) { 12 c[i] = (char)('a' + i); 13 } 14 for(int i = 0; i < 10; i++) { 15 c[i + 26] = (char)('0' + i); 16 } 17 for(int i = 0; i < c.length; i++) { 18 System.out.print(c[i] + " "); 19 } 20 } 21 22 }