发表于: 2020-11-26 23:35:51

1 1274



今天完成的事情:



数组+for循环练习题
//计算体质指数BMI
private static void PhysicalDemo(){
Scanner in = new Scanner(System.in);
System.out.println("请输入你的体重(类似137斤,kg*2)");
float weight = in.nextFloat();

System.out.println("请输入你的身高(类似1.75m)");
float height = in.nextFloat();

double BMI = (double)(weight/2)/(height*height);
if (BMI < 18.5){
System.out.println("过轻:低于18.5");
}
else if (BMI >= 18.5 && BMI < 25){
System.out.println("正常:18.5-25");
}
else if (BMI >= 25 && BMI < 28){
System.out.println("过重:25-28");
}
else if(BMI >= 28 && BMI < 32){
System.out.println("肥胖:28-32");
}
else if(BMI >= 32){
System.out.println("非常肥胖:高于32");
}
System.out.printf("BMI等于:%.1f\n", BMI);
}
//计算成绩提高的百分比
private static void PercentageDemo(){
Scanner in = new Scanner(System.in);
System.out.println("请输入期中考试小明的成绩:");
int Ach = in.nextInt();

System.out.println("请输入期末考试小明的成绩:");
int Ach1 = in.nextInt();

double Per = (double) (Ach1-Ach)/Ach1*100;
System.out.printf("成绩提高了:%.2f%%", Per);

}


时间花在石头剪刀布这个游戏上了,想了一会儿,没想出来,然后去看了答案,发现答案过于沙雕,算了,这写的没有意思。花了30分钟是有的。知道switch的可以自动帮你判断条件,不用额外输入x.equals(xxx).


面向对象,问几个为什么

1.类是什么?
2.怎么创造实例?

3.变量,属性,参数,之间的关系


碰到'Main.this' cannot be referenced from a static context(不能从静态上下文引用“ Main.this”)这个错误,

在网上看了半天的资料,没看懂


静态字段和方法与所有实例共享(这个是什么意思?意思就是只要设置成静态方法或者变量,其他的实例都能使用这个静态方法或者静态变量?)


静态字段和方法与所有实例共享。它们用于特定于类的值,而不是特定实例。对于方法,这通常是全局帮助器方法(如 )。对于字段,它通常是常量(如汽车类型,即具有不经常更改的有限集的东西)。Integer.parseInt()

所以这个就暂时跳过  


看书上的对象吧,但感觉看书  说实话,看   做也出问题   

那么接下来
做什么?


先看到静态字段和静态方法在做

现在不能书上和网站上同时看,同时看   思绪被拉扯的太远了


先看书


目的是检验自己还有那个地方不太懂不了解


import java.time.Year;
import java.util.Date;
import java.util.GregorianCalendar;

/**
* 4. 对象和类
* 主要内容:
* 1.面向程序设计
* 2.如何创建标准Java类库中的类对象
* 3.如何编写自己的类
*
* 4.1 面向对象程序设计概述
* 1.只要对象能够满足要求,就不必关心其功能的具体实现过程。接口的意义就在于此吧,还有封装。
* 2.面向对象将数据放在第一位,然后再考虑操作数据的算法。
* 3。面向对象适合解决规模较大的问题。
*
* 4.1.1
* 1.类是构造对象的模板,由类构造对象的过程称为创建类的实例。
*
* 2.封装是什么?把数据和方法封装起来,对使用者隐藏。
* 封装的关键:绝不能让类中的方法直接访问其他类的实例域(就是数据),这是个啥意思?想到继承,super关键字和这个有关系吗?
* 程序只能通过对象的方法与对象数据进行交换,这是mybatis中使用接口中的方法和数据库交换数据的意思吗?
*
*
* 4.1.2 对象
* 1.对象的行为:同一个类的所有对象实例,由于支持相同的行为而具有家族式的相似性。淘宝,天猫,京东,拼多多都是购物网站的实例,
* 2.对象的状态:每个对象都保存着描述当前特征的信息。这个在购物网站中例子是"已发货"或者"以付款"等等之类的。
* 而这个状态的改变必须通过调用方法来实现。
* 3.每个对象都有唯一的身份,例如在同一个订单系统中,任何两个订单都存在着不同之处,即使货物完全相同也是如此,这里的主要差异应该是订单号吧
*
*
* 4.1.3 识别类
* 1.程序设计:先从设计类(类一般是名词)开始,然后再往每个类当中添加方法(一般是名词)。
* 2.这只是经验,有局限性。
*
*
* 4.1.4 类之间的关系
* 1.依赖:一个类的方法操纵另一个类的对象,这就叫做依赖。想象不到例子
* 2.聚合:类A的对象包含类B的对象。
* 3.继承:类B继承类A,B不但得到A的所以方法,还有一些额外的方法。
*
* 4.2 预定义类
* 在这里了解到封装的关键,只需要知道方法名和参数,就可以调用它,而不必知道具体的实现过程,
* 想到之前的自己使用for做冒泡排序很复杂,但直接使用Arrays.sort();我并不知道它的具体实现过程,
* 但是使用它,就完成和冒泡排序一样的实现功能。
* 想到为什么会有面向API的编程这一说法了。
*
* 4.2.1 对象与对象变量
* 1.对象变量没有初始化的话是无法引用的,对象变量可以为null
*
* 4.2.2 Java类库中的GregorianCalendar(阳历日历)类
* 目的:如何知道外界调用这个类的方法
* 4.2.3 更改器方法与访问器方法 就是get set方法
*
* 可以使用类的接口解决复杂任务,而不必知道其中的实现细节。这句话见到好多次了,在mybatisspring中也用过
*
* 4.3 用户自定义类
*
* 4.3.2 多个源文件的使用
* 1.一般会将Student.javaStudentDemo.java分开来放。分开之后输入下列命令:javac StudentDemo.java
* 虽然没有输入Student.java,但运行时会自动查找
*/




public class ObjectDemo {
public static void main(String[] args) {
//4.1.1
City shenzhen = new City();
shenzhen.name = "深圳";//"深圳"和纬度这些是对象的属性
shenzhen.latitude = 22.27;
shenzhen.longitude = 113.46;
System.out.println(shenzhen.name);
System.out.println("北纬:"+shenzhen.latitude);

//4.2.1 对象与对象变量
String s = new Date().toString();//创建一个Date对象调用toString()方法
System.out.println(s);

Date birthday = new Date();
Date deadline;
// String d = deadline.toString();//报错,对象变量尚未初始化
deadline = null;
if (deadline != null){
System.out.println(deadline);
}
deadline = new Date();
String d = deadline.toString();
System.out.println(d);

GregorianCalendar G = new GregorianCalendar();
int year = G.getWeekYear();
System.out.println(year);

}

static class City{
//以下都是数据
private String name;
private double latitude;
private double longitude;
}


}
import java.util.Date;
import java.util.GregorianCalendar;

/**
* 4.3.1 Student
* 需求:通过教导,让学生成绩提升百分之二十
*
* 4.3.3 剖析Student
* 1.先看类中的构造器和四个方法,方法全部被标记喂public,意思是谁都可以调用这些方法
* 2.类中的三个数据(实例域),用private标记,意味着只有类中的方法能访问这些数据,当然外部的方法可以通过get方法获取这些数据
* 3.构造器和类同名,构造器总是伴随的new操作一起调用
* 4.构造器的作用,当new Student("小明", 485,2020,9,8);运行时。构造器会把实例域初始化,将值赋给实例域。
*
* 4.3.5 隐式参数和显式参数
* 1. 隐式参数:未出现的关键字this,目的是将实例域和局部变量分别开
* 2. 显式参数:就是传入的byPercent
*
* 4.3.6 封装的优点(标记,没怎么看懂)
* 1.可以改变内部实现,除该类的方法,不会影响到其他代码。
* 2.更改器可以执行错误检查,然而直接对域进行赋值将不会进行这些处理。
*
* 4.3.7 基于类的访问权限(例子没有)
* 1.一个方法可以访问所属类的所有对象的私有数据。
*
* 4.3.8 私有方法
*
* 4.3.9 final实例域
*/

public class StudentDemo {
public static void main(String[] args) {
Student[] pupil = new Student[3];
StudentDemo studentDemo = new StudentDemo();
pupil[0] = studentDemo.new Student("小明", 485,2020,9,8);
pupil[1] = studentDemo.new Student("小红", 516,2020,9,8);
pupil[2] = studentDemo.new Student("小黄", 472,2020,9,8);

//学生成绩提高百分之二十
for (Student s : pupil)
s.raiseScore(20);

//打印所有学生的信息
for (Student s : pupil)
System.out.println("name=" + s.getName() +",score"+ s.getScore()+
",StartLearnDay"+ s.getStartLearnDay());



}
class Student{//这里为什么非要有一个静态方法,就不是很理解,内部类
private String name;
private double score;
private Date StartLearnDay;

//这是一个有参的构造器,目的是什么?
public Student(String n, double s, int year, int month, int day){
// String name = n;
// double score = s;
// 不能再构造器中重新定义与实体类重名的局部变量,这样导致这些变量只能在构造器内部使用,这些变量屏蔽了同名的实例域
name = n;
score = s;
//公历用0表示一月,所以month-1
GregorianCalendar calendar = new GregorianCalendar(year,month-1,day);
StartLearnDay = calendar.getTime();//获取公历的时间

}

public boolean equals(Student other){
return name.equals(other.name);
}

//因为对属性设置private,所以需要通过getXXX来获取属性,这就是get的目的
public String getName(){
return name;
}

public double getScore(){
return score;
}

public Date getStartLearnDay(){
return StartLearnDay;
}

public void raiseScore(double byPercent){
double raise = score * byPercent/100;
score +=raise;
}
}
}
/**
* 4.4 静态域和静态方法
* 4.4.1 静态域
* 1.在类中设置静态变量,意味这之后所有创建的对象引用同一静态变量,静态变量一旦被修改,所有的静态变量都会修改
* 2.因为静态方法属于class StaticDemo,不属于class Person
*
* 4.4.2 静态常量
* 1.对于PI而言这中通用的常量设置为静态常量比较好
*
* 4.4.3 静态方法
* 1.静态方法属于class StaticDemo,所以Person在这里就变成一个对象,Person.setNumber(59);可以直接调用对象中的进行设置
* 2.调用静态方法不需要实例,无法访问this,但可以访问静态字段和其他静态方法
*/



public class StaticDemo {
public static void main(String[] args) {
// 4.4.1 静态域
Person ming = new Person("Xiao Ming", 12);
Person hong = new Person("Xiao Hong", 15);
ming.number = 88;
System.out.println(hong.number);
hong.number = 99;
System.out.println(ming.number);//99
System.out.println(hong.number);//99

Person.setNumber(59);
System.out.println(Person.number);//59
}
}

class Person {
public String name;
public int age;

public static int number;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

//静态方法
public static void setNumber(int value) {
number = value;
}
}



明天计划的事情:

完成第四章,第五章继承


遇到的问题:

以上


收获:自己动手根据目前的学到知识编一个代码,然后看到那个知识点不懂,就去了解








返回列表 返回列表
评论

    分享到