1、this关键字
this 表示当前对象, 2种用法
1) this.xxx, this.yyy() 访问对象的成员, 包括属性和方法
2) this(...) 连环调用其他构造器
注意:
1.使用this()必须放在构造器的首行!
2.使用this调用本类中其他的构造器,保证至少有一个构造器是不用this的。
如果在构造器中, this代表正在创建的对象
如果在普通方法中, this表示此方法的调用者对象.
2、JeanBean
JavaBean 是用java 语言写的可重用组件
1) 类是公共的 : 大家都能用
2) 有公共无参构造器 : 创建对象简单
3) 有属性, 并有get/set : 让一个对象携带大量的数据.
3、构造器
无参构造器: 简单, 功能弱, 所有创建出来的对象是千篇一律, 千人一面.
更重要, javabean规范中要求必须要有无参构造器, 子类构造器默认调用父类无参, 反射时创建对象时方便, 反序列化时也方便.
全参构造器:复杂, 功能强大,对象属性可以一步到位
注意:
1)Java语言中,每个类都至少有一个构造器
2)默认构造器的修饰符与所属类的修饰符一致
3)一旦显式定义了构造器,则系统不再提供默认构造器
4)一个类可以创建多个重载的构造器
5)父类的构造器不可被子类继承
4、package 关键字
使用格式
1)package语句必须放在最上面, 把源文件 中的所有类编成的class文件放入指定的包目录结构
2)package 包名.子包名.子子包名.子子子包名;
3)package 机构类型.机构名称.项目名称.模块名称;
如,package com.atguigu.javase.javabean;
一个类一旦有包的限制, 它的使用就变得麻烦
如果在其他包中使用当前类时, 必须使用当前类的全限定名称: 包名.子包名.子子包名.子子子包名.类名;
简单类名 : 没有包名的类名
package的作用就是方便管理类, 另一方面也可以解决类名冲突问题.
5、import关键字
import语句告诉编译器到哪里去寻找类。
语法格式: import 包名[.子包名…]. <类名 |*>
import的作用是导入类, 导入的是其他包中的类
import 全限定类名;
在本文件中就不可以不用再使用全限定
6、对象创建的过程
1) 在永久区中检查要创建的对象的所属的类是否已经加载
2) 如果不存在, 由类加载器(ClassLoader)来负责加载类模板
3) 如果存在, 则不加载, 保证类模板只有一份
4) 依据类模板中的所有的属性的定义在GC区中开辟一块内存空间
5) JVM再把此空间全部写0, 结果就是所有属性自动拥有了缺省值0
6) 执行显式赋值
7) 执行构造方法
8) 返回对象首地址
图示
7、引用数组
示例代码
package com.atguigu.javase.javabean;
public class Phone {
private String os;
private double screen;
private int memory;
public Phone(){
this("安卓",6.2,8);
}
public Phone(String os, double screen, int memory){
this.os = os;
this.screen = screen;
this.memory = memory;
}
public void setOs(String os) {
this.os = os;
}
public String getOs(){
return os;
}
public void setMemory(int memory) {
this.memory = memory;
}
public int getMemory(){
return memory;
}
public void setScreen(double screen) {
this.screen = screen;
}
public double getScreen(){
return screen;
}
public String say(){
return "操纵系统:"+os+",屏幕大小:"+screen+",内存:"+memory;
}
}
package com.atguigu.javase.javabean;
import com.atguigu.javase.javabean.Phone;
public class Student {
private int id;
private String name;
private int grade;
private double score;
public Student(){
this(1,"小张",2,60);
}
public Student(int id,String name,int grade,double score){
this.id = id;
this.name = name;
this.grade = grade;
this.score = score;
}
public void setId(int id){
this.id = id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public void setGrade(int grade){
this.grade = grade;
}
public int getGrade() {
return grade;
}
public void setScore(double score){
this.score = score;
}
public double getScore(){
return score;
}
public String wangzhe(Phone ph){
return name+"在使用手机["+ph.say()+"]玩游戏";
}
public void eat(String some){
System.out.println(name+"正在吃"+some);
}
public String say(){
return "学号:"+id+", 姓名:"+name+",年级"+grade+",成绩"+score;
}
}
package com.atguigu.javase.test;
import com.atguigu.javase.javabean.Phone;
import com.atguigu.javase.javabean.Student;
import com.sun.media.sound.RIFFInvalidDataException;
public class StudentTest {
public static void main(String[] args) {
Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
String[] name2 = {"伟", "雪", "明", "丽", "琳", "芳", "妮", "媛"};
for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
int id = 1+i;
int index1 = (int)(Math.random() * 1000) % name1.length;
int index2 = (int)(Math.random() * 1000) % name2.length;
String name = name1[index1] + name2[index2];
int grade = (int)(Math.random()*6+1);
double score = (int)(Math.random()*100+1);
stuArr[i] = new Student(id,name,grade,score);
}
//遍历
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].say());
}
System.out.println();
//找三年级最牛
Student maxStudent3 = null;
for (int i = 0; i < stuArr.length; i++) {
if (stuArr[i].getGrade() == 3) {
if (maxStudent3 == null) {
maxStudent3 = stuArr[i];
}else{
if (stuArr[i].getScore() > maxStudent3.getScore()) {
maxStudent3 = stuArr[i];
}
}
}
}
if(maxStudent3 == null){
System.out.println("没有三年级学生");
}else {
System.out.println("三年级最牛:"+maxStudent3.say());
}
}
public static void main6(String[] args) {找三年级最高分
Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
String[] name2 = {"伟", "雪", "明", "丽", "琳", "芳", "妮", "媛"};
for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
int id = 1+i;
int index1 = (int)(Math.random() * 1000) % name1.length;
int index2 = (int)(Math.random() * 1000) % name2.length;
String name = name1[index1] + name2[index2];
int grade = (int)(Math.random()*6+1);
double score = (int)(Math.random()*100+1);
stuArr[i] = new Student(id,name,grade,score);
}
//遍历
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].say());
}
System.out.println();
//找三年级最高分
double maxScore3 = 0x8000_0000;//maxScore3 = -1就好
for (int i = 0; i < stuArr.length; i++) {
if(stuArr[i].getGrade() == 3){
if (stuArr[i].getScore() > maxScore3) {
maxScore3 = stuArr[i].getScore();
}
}
}
if (maxScore3 == 0x8000_0000) {
System.out.println("没有三年级的学生");
}else{
System.out.println("三年级最高分:"+maxScore3);
}
}
public static void main5(String[] args) { //找出最差的学生
Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
String[] name2 = {"伟", "雪", "明", "丽", "琳", "芳", "妮", "媛"};
for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
int id = 1+i;
int index1 = (int)(Math.random() * 1000) % name1.length;
int index2 = (int)(Math.random() * 1000) % name2.length;
String name = name1[index1] + name2[index2];
int grade = (int)(Math.random()*6+1);
double score = (int)(Math.random()*100+1);
stuArr[i] = new Student(id,name,grade,score);
}
//遍历
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].say());
}
System.out.println();
//找出最差的学生
Student minStudent = stuArr[0];//引用对象 假设第一个是最差的
for (int i = 0; i < stuArr.length; i++) {
if(stuArr[i].getScore() < minStudent.getScore()){//比较的是对象的成绩
minStudent = stuArr[i];
}
}
System.out.println("最菜:"+minStudent.say());
}
public static void main4(String[] args) { //找全校最高分
Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
String[] name2 = {"伟", "刚", "明", "丽", "琳", "芳", "妮", "媛"};
for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
int id = 1+i;
int index1 = (int)(Math.random() * 1000) % name1.length;
int index2 = (int)(Math.random() * 1000) % name2.length;
String name = name1[index1] + name2[index2];
int grade = (int)(Math.random()*6+1);
double score = (int)(Math.random()*100+1);
stuArr[i] = new Student(id,name,grade,score);
}
//遍历
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].say());
}
//找全校最高分
double minScore = stuArr[0].getScore();
double maxScore = stuArr[0].getScore();
for (int i = 0; i < stuArr.length; i++) {
if (stuArr[i].getScore() > maxScore) {
maxScore = stuArr[i].getScore();
}
if (stuArr[i].getScore() < minScore) {
minScore = stuArr[i].getScore();
}
}
System.out.println("全校最高分:"+maxScore);
System.out.println("全校最低分:"+minScore);
}
public static void main3(String[] args) {//求有条件的平均值 3年级平均分
Student[] stuArr = new Student[10]; //这是学生数组对象 空抽屉
String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
String[] name2 = {"伟", "刚", "明", "丽", "琳", "芳", "妮", "媛"};
for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
int id = 1+i;
int index1 = (int)(Math.random() * 1000) % name1.length;
int index2 = (int)(Math.random() * 1000) % name2.length;
String name = name1[index1] + name2[index2];
int grade = (int)(Math.random()*6+1);
double score = (int)(Math.random()*100+1);
stuArr[i] = new Student(id,name,grade,score);
}
//遍历
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].say());
}
//求平均分
double sum = 0;
for (int i = 0; i < stuArr.length; i++) {
sum += stuArr[i].getScore();
}
double avg = sum / stuArr.length;
System.out.println("全校平均分="+avg);
//求有条件的平均值 3年级平均分
double sum3 = 0;
int count3 = 0;
for (int i = 0; i < stuArr.length; i++) {
if (stuArr[i].getGrade()== 3) {
sum3 += stuArr[i].getScore();
count3 ++;
}
}
if(count3 == 0){
System.out.println("没有三年级学生");
}else{
double avg3 = sum3 / count3;
System.out.println("三年级学生的平均成绩:"+String.format("%.2f",avg3));//String.format("%.2f",avg3) 保留两位小数
}
}
public static void main2(String[] args) {
Student[] stuArr = new Student[10];//这是学生数组对象 空抽屉
String[] name1 = {"李","张","王","赵","孙", "刘", "杨"};//产生随机姓名
String[] name2 = {"伟", "刚", "明", "丽", "琳", "芳", "妮", "媛"};
for (int i = 0; i < stuArr.length; i++) {//创建学生对象 往抽屉里放东西
int id = 1+i;
int index1 = (int)(Math.random() * 1000) % name1.length;
int index2 = (int)(Math.random() * 1000) % name2.length;
String name = name1[index1] + name2[index2];
int grade = (int)(Math.random()*6+1);
double score = (int)(Math.random()*100+1);
stuArr[i] = new Student(id,name,grade,score);
}
//遍历
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].say());
}
System.out.println("-----------------------------------------");
for (int i = 0; i < stuArr.length; i++) {
if(stuArr[i].getGrade() == 3){
System.out.println(stuArr[i].say());
}
}
}
public static void main1(String[] args) {
Student s1 = new Student();//挎包使用必须全限定
System.out.println(s1.say());
Phone p1 = new Phone();
System.out.println(s1.wangzhe(p1));
Student s2 = new Student(3,"小王",5,99);
System.out.println(s2.say());
}
}
总结
今天的学习内容
1)JavaBean
2)package、import关键字
3)引用对象之间的相互调用
4)创建对象的过程
5)引用数组