Java4
(一)、类和对象
类:是对象共同特征的描述(设计图)
对象:是真实存在的具体东西
先设计类,才能获得对象
定义类:
得到类的对象:
访问属性:对象名.成员变量
访问行为:对象.方法名()
定义类的注意事项:
对象的成员变量的默认值规则:
(二)、封装
原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为
private:
针对每一个私有的成员变量,都要提供set和get方法
set方法:给成员变量赋值 (有参数无返回)
get方法:对外提供成员变量的值 (直接返回)
(三)、就近原则和this
当成员变量和局部变量重名时,使用就近原则
想使用成员变量要用this
就近原则:谁离我近,我就用谁
this的本质代表调用方法的地址值
(四)、构造方法
在创建对象的时候给成员变量进行赋值
格式:
特点:
执行时机:
1.创建对象的时候由虚拟机调用,不能手动调用
2.每创建一次对象,就会调用一次构造方法
如果我们没有创建构造方法,系统会给出一个默认的空参构造方法
如果构造了,系统将不会再提供默认的构造方法
构造方法的重载:
(五)、标准JavaBean类
规则:
idea中的快捷生成 alt+insert 或者 alt+fn+insert
ptg插件,1s生成
(六)、内存图
字节码文件加载时进入方法区
创建对象时虚拟机做的事情:
使用了new就会在堆内存开辟空间
两个变量指向同一片空间,通过一个变量改变了空间的值,用另一个变量访问时就是改变后的值
(七)、成员变量和局部变量
成员变量:类中方法外的变量
局部变量:方法中的变量
(八)、综合训练
8.1文字版格斗游戏
拓展:
System.out.println();空格内不写东西表示直接换行
System.out.printf("");
由两部分组成
第一部分参数:%s(占位)
第二部分参数:填充的数据,填充的%s
package tdjava;
import javax.management.relation.Role;
public class dx1_1 {
public static void main(String[] args) {
dx1 r1= new dx1("乔峰",100);
dx1 r2=new dx1("小明",100);
while (true){
r1.attack(r2);
if(r2.getBlood()==0){
System.out.println(r1.getName()+"ko了"+r2.getName());
break;
}
r2.attack(r1);
if (r1.getBlood()==0){
System.out.println(r2.getName()+"ko了"+r1.getName());
break;
}
}
}
}
javabean类:
package tdjava;
import javax.management.relation.Role;
import java.util.Random;
public class dx1 {
private String name;
private int blood;
public dx1(){
}
public dx1(String name,int blood){
this.name=name;
this.blood=blood;
}
public int getBlood() {
return blood;
}
public String getName() {
return name;
}
public void setBlood(int blood) {
this.blood = blood;
}
public void setName(String name) {
this.name = name;
}
//定义一个方法攻击别人
//方法的调用者攻击参数
public void attack(dx1 dx11){
Random r=new Random();
int hurt=r.nextInt(20)+1;//随机造成的伤害
int remainBoold =dx11.getBlood()-hurt;
remainBoold=remainBoold<0?0:remainBoold;//剩余血量如果为负数就为0
dx11.setBlood(remainBoold);
System.out.println(this.getName()+"举起拳头,打了"+dx11.getName()
+"一下,造成了"+hurt+"点伤害"+this.getName()+"还剩下"+remainBoold+"点血");
}
}
8.2 对象数组
需要的javabean:
package tdjava;
public class dx2 {
private String id;
private String name;
private double price;
private int count;
public dx2() {
}
public dx2(String id, String name, double price, int count) {
this.id = id;
this.name = name;
this.price = price;
this.count = count;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
package tdjava;
public class dx2Text {
public static void main(String[] args) {
dx2[] arr=new dx2[3];
dx2 g1=new dx2("001","p40",5999,100);
dx2 g2=new dx2("002","p50",6999,110);
dx2 g3=new dx2("003","p60",7999,120);
arr[0]=g1;
arr[1]=g2;
arr[2]=g3;
for (int i = 0; i < arr.length; i++) {
dx2 goods=arr[i];
System.out.println(goods.getId()+","+goods.getName()+","+goods.getPrice()+","+goods.getCount());
}
}
}
练习2:
类:
package tdjava;
public class car {
private String brand;
private int price;
private String color;
public car() {
}
public car(String brand, int price, String color) {
this.brand = brand;
this.price = price;
this.color = color;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
测试代码:
package tdjava;
import java.util.Scanner;
public class carTest {
public static void main(String[] args) {
//创建数组
car[] arr=new car[3];
Scanner sc=new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
car c=new car();
System.out.println("请输入汽车品牌");
String b=sc.next();
c.setBrand(b);
System.out.println("请输入汽车价格");
int p=sc.nextInt();
c.setPrice(p);
System.out.println("请输入汽车颜色");
String color=sc.next();
c.setColor(color);
//将对象添加到数组中
arr[i]=c;
}
for (int i = 0; i < arr.length; i++) {
car car=arr[i];
System.out.println(car.getBrand()+","+car.getColor()+","+car.getPrice());
}
}
}
练习3:
类:
package tdjava;
public class Phone {
private String brand;
private int price;
private String color;
public Phone() {
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Phone(String brand, int price, String color) {
this.brand = brand;
this.price = price;
this.color = color;
}
}
测试:
package tdjava;
public class PhoneTest {
public static void main(String[] args) {
Phone[] arr=new Phone[3];
Phone p1=new Phone("小米",1999,"白色");
Phone p2=new Phone("华为",3999,"黑色");
Phone p3=new Phone("魅族",2999,"蓝色");
arr[0]=p1;
arr[1]=p2;
arr[2]=p3;
int sum=0;
for (int i = 0; i < arr.length; i++) {
Phone phone=arr[i];
sum+=phone.getPrice();
}
int average=sum/arr.length;
System.out.println(average);
}
}
练习4:
测试:
package tdjava;
public class GfTest {
public static void main(String[] args) {
Gf[] arr=new Gf[4];
Gf g1=new Gf("小美",18,"女","吃饭");
Gf g2=new Gf("小杨",19,"女","喝水");
Gf g3=new Gf("小七",20,"女","看电影");
Gf g4=new Gf("小八",21,"女","运动");
arr[0]=g1;
arr[1]=g2;
arr[2]=g3;
arr[3]=g4;
int sum=0;
for (int i = 0; i < arr.length; i++) {
Gf Gf=arr[i];
sum+=Gf.getAge();
}
double avg=sum*1.0/ arr.length;
for (int i = 0; i < arr.length; i++) {
Gf Gf1=arr[i];
if (Gf1.getAge()<avg){
System.out.println(Gf1.getAge()+","+Gf1.getGender()+","+Gf1.getLike()+","+Gf1.getName());
}
}
}
}
练习5:
package tdjava;
import com.sun.xml.internal.ws.api.ha.StickyFeature;
public class Test {
public static void main(String[] args) {
Student[] arr=new Student[3];
Student stu1=new Student(1,"张三",23);
Student stu2=new Student(2,"李四",24);
Student stu3=new Student(3,"王五",25);
arr[0]=stu1;
arr[1]=stu2;
arr[2]=stu3;
Student stu4=new Student(4,"赵六",26);
//先判断唯一性,再添加进数组
boolean flag=contains(arr,stu4.getId());
if (flag){
System.out.println("id重复,无法添加");
}else {
int count=howarr(arr);
if (count==arr.length){
//存满
Student[] newArr = newArr(arr);
newArr[count]=stu4;
printArr(newArr);
}else {
//howarr得到是2,表示已经存了2个元素
//也表示下一个存的元素的索引位置
arr[count]=stu4;
printArr(arr);
}
}
}
public static void printArr(Student[] arr){
for (int i = 0; i < arr.length; i++) {
Student stu=arr[i];
if (stu!=null){
System.out.println(stu.getId()+","+stu.getAge()+","+stu.getName());
}
}
}
//创建新数组,长度=老数组+1
//把老数组元素,拷贝到新数组
public static Student[] newArr(Student[] arr){
Student[] newArr=new Student[arr.length+1];
for (int i = 0; i < arr.length; i++) {
newArr[i]=arr[i];
}
return newArr;
}
//判断数组中存了几个元素
public static int howarr(Student[] arr){
int count=0;//计数器统计数组中存的元素
for (int i = 0; i < arr.length; i++) {
if (arr[i]!=null){
count++;
}
}
return count;
}
//判断id是否存在
public static boolean contains(Student[] arr,int id){
for (int i = 0; i < arr.length; i++) {
Student stu=arr[i];
if (stu!=null){
int sid=stu.getId();
if (sid==id){
return true;
}
}
}
return false;
}
}
(九)、键盘录入拓展
第一套体系:
nextInt()接收整数
nextDouble()接收小数
next()接收字符串
遇见空格,制表符,回车键就停止接收,这些符号后面的数据就不会接受了
第二套:
nextLine()接收字符串
可以接收空格,制表符,遇见回车才停止接收
注:两套体系不能混用
如果先用nextInt ,再用nextLine,nextLine就会接收不到数据
文章评论