前言:

从考研后,许久都没有碰代码了,要花点时间找回状态林。两天实训,慢慢地转换面向对象写法,慢慢领悟JAVA的精髓吧。


快捷键与工具:


Windows快捷键:

稍后补上编程常用的。

eclipse and myeclips

快捷键文档:


  1. alt+ / 提示
  2. ctrl+shif+/注释
  3. ctrl+shift+\撤销注释
  4. 快速导包 :shify+ctrl+o
  5. 代码对其ctrl+shift+f
  6. alt+shift+s:启动构造函数登函数的“注入”
  7. ctrl跳入定义

Shift+delete+f

JAVA基础

1.命名:


  1. 变量驼峰,
  2. 类名采用帕斯卡命名法,首字母大写。

2.输入:

System.out.print("请输入分数\n");
Scanner input=new Scanner(System.in);
int score=input.nextInt();
System.out.print("平均分\t"+score);
System.out.print("请输入姓名\n");
char name=input.next().charAt(0);
System.out.print("姓名\t"+name);

Note:


  1. 注意输出的时候int在​双引号下被强转​,比如:System.out.print("平均分\t"+score+2); 分数此时会发生toString转换得出字符串拼接
  2. 1.JAVA中main()只能是静态的方法,故静态方法中应当调用静态函数方法
  3. 与C++不同,Java字符串对比要使用"zhangsan".equalsIgnoreCase(answer) 有效处理空指针,注意比较字符串的时候equals前面XX.equals()尽量是已知字符串可以有效的预防空​指针报错

3.JAVA对象数组

基本类型存于在​​,复合类型存于​​之中,与C++一样,堆的空间是动态的。

4.基础算法

等腰三角输出、空心三角:

void display1(int x){
//实心等腰三角形
for(int i=1;i<=x;i++){
for(int j=5-i;j>=1;j--){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
}
void display2(int x){
//空心等腰
for(int i=1;i<x;i++){
for(int j=5-i;j>=1;j--){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
if(j==1||j==2*i-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
for(int j=1;j<=2*x-1;j++)
System.out.print("*");
}



JAVA面向对象:

特性:

封装、继承、多态、抽象,接口

1.断点调试:

需要注意的是,设置好断点后,断点调试可以通过右边变量的情况变化进行调试

2.继承:


  1.       调用构造函数,学会利用编译器进行直接构造以及数据成员的get\set
  2.       子类可以使用super();

方法重载

自定义方法重载:

与C++一样。。。

系统方法重载

重载系统的方法,特别重载equals时:

equals方法的重写,​没重写​之前比较的是​地址

重写之后可以自己定义​比较的内容。

public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(obj instanceof People){
People people2=(People) obj;
if(this.getAge()==people2.getAge()){
System.out.println("nainsd");
return true;
}

}
return false;
}

Hashcode的作用:

注意:

 ​哈希码是一个人名用于地址.

 ​

讲得非常好,力推一下。

对象数组:

MotoVehicle moto1[] = {new Car(),new Car(), new Bus()};
MotoVehicle moto1[]=new Car[2];


Note:

1.与C++相比,JAVA机制在处理对象类型的判断比较严格,可用instanceof 判断对象的属性

public int calRent(int days,MotoVehicle[] motes){
int money=0;
System.out.println("comein");
for(MotoVehicle m:motes){
System.out.println(m.getBrand());
if(m instanceof Car)
{
//System.out.println(m.getBrand());
if(m.getBrand().equals("别克GL8")){
money+= 600*days;
}else if(m.getBrand().equals("别克550")){
money+= 500*days;
}
}
if (m instanceof Bus) {
if(m.getBrand().equals("金龙")){
money+= 400*days;
}else if (m.getBrand().equals("金鱼")) {
money+= 300*days;
}

}
}
return money;
}

2.Object对象是所有对象的​父类​,因此在使用时​应当​适当的​转换​,方可调用相应方法,这在equals方法中非常重要

3.多态

继承父类同名方法,一个方法名有多重行为,C++类似,JAVA不用指针可直接通过对象NEW 子对象来实现:

public static void main(String[] args) {
MotoVehicle moto=new Car("宝马","别克GL8");
int money=moto.calRent(4,"别克GL8");
//MotoVehicle moto1[] = {new Car(),new Car(), new Bus()};
MotoVehicle moto1[]=new Car[2];
moto1[0].setBrand("别克GL8");
moto1[1].setBrand("别克550");
moto1[2].setBrand("金龙");
int money1=moto.calRent(4, moto1);
System.out.println("总价格"+money1);
}

!!!

体会一下什么叫面向对象,所谓面向对象封装一定要做好,类就是该​类特有才可作为属性​,其他参数应该进行传入

    /*

     * 订单类

     * 属性:订餐人,送餐时间,送餐地址,订单状态,数量,菜单对象

     * 方法:显示基本信息

     */

!!!

每天一道算法题

​https://www.zhihu.com/question/280279208/answer/510354868​