javase学习笔记(二)
一、数组
- 注意下标的有限范围0~n-1
- 一组连续地存储空间,存储相同的数据类型的值
- int [ ] a=new int[5];
- int a[ ]=new int [5];二者没有区别
- 默认值:整数—0,小数—0.0,字符—\u0000,布尔—flase,其他—null
解决问题:
- 平均值
- 查找元素是否存在
- 排序问题:冒泡,选择,jdk
import java.util.Arrays
;-----Array.sort(数组名)升序
降序:手动倒置元素i,n-1-i,辅助变量
二、 Eclipse的使用
解压,桌面快捷方式
选择工作存储空间
- 选择java模式:window----Perspective —Open Perspective —other—java
- 修改字体font:window—Preferences(首选项)–font—colors and font ----Basic----Text Font —字号
- 修改编码:window—Preferences(首选项)–encoding—Workspace—text file encoding —other —Utf-8
- 修改代码提示:window—Preferences(首选项)–assist(助手)—java—Editor—Content Assist—Auto Activation的triggers for javac选项修改为:
.abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- 创建项目
- File–New --java Project—project name(项目名称)``其它默认即可`
- jre(电脑安装相关联的开发环境)
- src 存放源代码—new— package(包)----class(类)
建包时,中间用点隔开.
- 绿色三角点击运行
- 快捷键:
三、面向对象
- 程序就是用计算机语言编写的指令集合
- oop(object oriented programming)万物皆对象
- 对象:行为(方法)、特征(属性)
类
模板
- 在一组相同或类似的事物中,抽取出来共有的特征和行为
- 类名 对象名 =new 类名()
- 对象名.属性名,对象名.方法名(参数)
- 一个类(模板)可以有多个对象(实例)
类:定义了对象具有的特征和行为;
对象:拥有多个特征和行为的实体
方法重载
:方法名相同,参数列表(l类型,个数,顺序)不同,与访问修饰符和返回值类型无关
好处:屏蔽使用差异,灵活,方便
根据实际传入的值判定使用的方法构造方法或构造器public 类名(){......}
主要用于创建对象
- 没有返回值类型
- 创建对象时,调用构造方法,不可通过句点调用
- 名称与类名相同
- 类中一般默认有无参的构造方法
- 开辟内存空间(栈–变量(
保存数据的内存地址
)名等局部变量,堆–存放对象数据等)- 对变量赋值
- 执行构造方法的代码
构造方法的重载
- 重载时注意无参要写上去,否则报错!!!
this
- 表示当前对象(
调用属性,调用方法
)- 局部变量和实例变量名相同,
优先访问局部变量
,此时,若要访问实例变量要用到this.前缀;(不存在重名是,this则可以省略)- 调用本类中的其他构造方法
this() this(实参)
,必须在首行被调用
四、三大特性
- 封装
属性私有化,方法通过get set 控制
Alt+Shift+S:快捷键,写Getter()Setter()方法
Alt+/
:默认构造方法
带参数的构造方法
:·alt+shift+s–>Constructor
写父类方法名:
快速重写父类的方法(方法覆盖)
- 综合案例—银行
- 继承
- 父类(抽象类):可根据程序需要使用的多个具体类,进行共性抽取,实现代码重用;
- class 子类 extends 父类{…}
- java为单继承,一个类只有一个父类,但可以多级集成,属性和方法逐级叠加;
构造方法不被继承;private修饰的属性和方法进本类可见;父子类不在同一个package中,default修饰的属相和方法也不可被继承(仅同包可见);
- 方法的覆盖(方法重写)
父类无法满足子类的需求
- 注解:验证是否遵循方法的定义规则
- super
super.父类方法名()
- super的使用
super与this
- 多态
package com.qf.poly_1;
/**
* 动物类(父类)
* @author wgy
*
*/
public class Animal {
//品种
String breed;
//年龄
int age;
//性别
String sex;
//吃
public void eat() {
System.out.println("吃.......");
}
//睡
public void sleep() {
System.out.println("睡........");
}
}
package com.qf.poly_1;
public class Dog extends Animal{
//毛色
String furColor;
//跑
public void run() {
System.out.println("狗狗开始跑步...");
}
@Override
public void eat() {
System.out.println("狗狗开始大口大口的吃狗粮");
}
}
package com.qf.poly_1;
public class TestDog {
public static void main(String[] args) {
// Animal animal=new Animal();
//1逻辑上 Dog is a Animal 2 语法讲 (自动类型转换)
Animal a=new Dog();
a.age=2;
a.breed="萨摩";
a.sex="公";
a.eat();
a.sleep();
System.out.println("-----------------");
Animal a2=new Bird();
a2.eat();
a2.sleep();
// short s=10;
// int num=s;
}
}
- 场景一
package com.qf.poly_1;
/**
* 主人类
* @author wgy
*
*/
public class Master {
String name;
/**
* 喂狗狗
*/
// public void feed(Dog dog) {
// System.out.println(this.name+"喂食");
// dog.eat();
// }
//
/**
* 喂鸟
*/
// public void feed(Bird bird) {
// System.out.println(this.name+"喂食");
// bird.eat();
// }
//使用多态优化
public void feed(Animal animal) {
System.out.println(this.name+"喂食");
animal.eat();
}
//购买动物
public Animal buy(int type) {
Animal animal=null;
if(type==1) {
animal=new Dog();
}else if(type==2) {
animal=new Bird();
}
return animal;
}
}
package com.qf.poly_1;
public class TestMaster {
public static void main(String[] args) {
Master master=new Master();
master.name="小明";
Dog wangcai=new Dog();
Bird bird=new Bird();
//喂食
master.feed(wangcai);
master.feed(bird);
}
}
- 场景二
package com.qf.poly_1;
import java.util.Scanner;
public class TestMaster2 {
public static void main(String[] args) {
System.out.println("--------欢迎来到xxx动物市场--------");
System.out.println("----------1.狗狗 2.鸟儿------------");
System.out.println("请选择");
Scanner input=new Scanner(System.in);
int choice=input.nextInt();
Master master=new Master();
Animal animal=master.buy(choice);
if(animal!=null) {
System.out.println("购买成功");
if(animal instanceof Dog) {
Dog dog=(Dog)animal;
dog.run();
}else if(animal instanceof Bird) {
Bird bird=(Bird)animal;
bird.fly();
}
}else {
System.out.println("购物失败");
}
}
}
- 向上转型(装箱)
- 向下转型(拆箱)
- 类型转换异常
instanceof关键字
五、三个修饰符
- 抽象abstract
- 抽象类的作用
- 抽象总结
- static
- 实例属性是每个对象各自持有的独立空间(多份),对象单方面修改,不会影响其他对象。
- static 修饰属性时,它属于整个类,调用时
类名.属性名
----存与方法区- 静态属性是整个类共同持有的独立空间(一份),任何对象修改,都会影响其他对象—
可计算一个类被创建多少次对象,在无参构造方法中count++
- 不必创建对象,可通过类名来访问
- 静态方法
- 触发类加载
- static总结
- final关键字
最终,不可更改
- final修饰的方法不能被重写,但是可以被继承,final修饰的属性不可修改
- final总结
- 引用类型的属性可以改变
六、接口
- 实现(类与接口的关系)
implements
可以作为引用类型(可以创建变量
)
- 先继承后实现
- 可序列化,可克隆
- 接口是一种标准,规范
- 总结