前言:
从考研后,许久都没有碰代码了,要花点时间找回状态林。两天实训,慢慢地转换面向对象写法,慢慢领悟JAVA的精髓吧。
快捷键与工具:
Windows快捷键:
稍后补上编程常用的。
eclipse and myeclips
快捷键文档:
- alt+ / 提示
- ctrl+shif+/注释
- ctrl+shift+\撤销注释
- 快速导包 :shify+ctrl+o
- 代码对其ctrl+shift+f
- alt+shift+s:启动构造函数登函数的“注入”
- ctrl跳入定义
Shift+delete+f
JAVA基础
1.命名:
- 变量驼峰,
- 类名采用帕斯卡命名法,首字母大写。
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:
- 注意输出的时候int在双引号下被强转,比如:System.out.print("平均分\t"+score+2); 分数此时会发生toString转换得出字符串拼接
- 1.JAVA中main()只能是静态的方法,故静态方法中应当调用静态函数方法
- 与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.继承:
- 调用构造函数,学会利用编译器进行直接构造以及数据成员的get\set
- 子类可以使用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