数据类型
- 八种数据类型六种数字类型(四个整数, 两个浮点), 一个字符串类型, 一个布尔类型
- byte: 8位, 主要用于代替整数, 因为他的大小只有int的四分之一
- short: 16位, 同byte, 大小是int的二分之一
- int: 32位
- long: 64位, 主要用于比较大的整数上
- float: 单精度浮点型, 32位, 在存储大型浮点型时可以节省空间
- double: 双精度浮点型, 64位, 浮点数的默认类型
- boolean: 布尔类型 默认false
- char: 字符类型
- 复杂数据类型(引用数据类型)
- 对象及数组都是复杂数据类型
- 所有引用类型默认值都是null
- 常量
- java中用final表示常量
修饰符
- java中分了两类修饰符: 访问修饰符, 非访问修饰符
- 访问修饰符
- default: 默认, 同一个包内可见
- private: 同一个类中可见
- pubilc: 所有类中可见
- protected: 同一个包下的类和其子类可见
- 非访问修饰符
- static: 修饰类方法和类变量
- final: 修饰类, 方法, 和变量, 不能被继承, 是常量不能被修改
- abstract: 创建抽象类和抽象方法
- synchronized 和 volatile 修饰符,主要用于线程的编程。
- 抽象方法, 是一个没有任何实现的方法, 该方法的具体实现由 其子类提供 抽象方法不能被定义成final和static
循环
- break: 结束循环
- continue: 跳过本次循环执行下次循环
类与对象
- 类是一个模板, 用来描述对象的一系列的行为状态
- 对象是类的实例, 同js里 new一个对象
- 距离定义一个学生类包括名字年龄等, 对象就是具体到每个学生
变量
- 局部变量: 在方法或构造方法中定义, 方法执行完销毁
- 成员变量,: 定义在类中方法体之外的变量, 在创建对象时会实例化, 可以被类中方法和特定类的语句访问
- 类变量: 也声明在类中, 但必须为static类型
构造方法
- 每个类都有构造方法, 创建对象时需要调用一个构造方法, 构造方法名称必须与类名相同
创建对象
- 声明: 声明一个对象, 包括对象的名称和类型
- 实例化: 使用new关键字创建一个对象
- 初始化: 用new创建对象时, 会调用构造方法初始化对象
public class Tsxt {
int studentAge;
// 定义一个构造方法
public Tsxt(String name) {
System.out.println("学生名字是" + name);
}
// 设置年龄
public void setAge (int age) {
studentAge = age;
}
// 获取年龄
public int getAge () {
System.out.println("学生年龄" + studentAge);
return studentAge;
}
// 主函数
public static void main(String[] args) {
// 创建一个对象
Tsxt studentOne = new Tsxt("无名");
studentOne.setAge(10);
studentOne.getAge();
}
}
- 文件名应与文件内pubilc类名相同
- java包: 用来对类和接口进行分类
继承
- 继承特性
- 子类可以继承父类的所有非private的属性方法
- 子类可以对父类的属性方法进行扩展
- 子类可以用自己的方法实现父类
- 提高了类之间的耦合性
- 继承关键字
- extends: 类的继承
- implements: 类继承接口时, 可以同时继承多个接口,接口间用逗号分隔
- super与this关键字
- 通过super关键字可以实现对父类成员的访问, 用来引用当前对象的父类
- this, 指向自己的引用
class Animals {
void eat() {
System.out.println("动物吃什么");
}
}
// 继承父类
class Dog extends Animals {
void eat() {
System.out.println("狗吃骨头");
}
void eatText() {
this.eat(); // this调用自己方法
super.eat(); // super 调用父类方法
}
}
// 主函数
public class Animal {
public static void main(String[] args) {
Animals a = new Animals();
a.eat();
Dog d = new Dog();
d.eatText();
}
}
- final: final关键字可以用来修饰 变量方法和类,. 使用final关键字声明类可以把类定义为最终类不能被继承 , 修饰方法的话该方法不能被子类重写
- 构造器 super关键字
- 子类不会继承父类构造器的, 只是调用
- 父类构造器有参数的话需要子类用super关键字掉下适配参数列表
- 如果父类构造器没有参数则系统会自动调用父类无参构造器
重写与重载
- 重写: 子类与父类使用同一个方法名, 即外壳不变, 内核重写
- 重载
- 重载是在一个类中方法名相同而参数不同, 返回类型可以相同也可以不同
- 重载的函数必须有一个独一无二的参数列表
多态
-
说白了就是在父类中定义一个方法而不去写其具体实现方式而是在其子类中定义
-
一个行为有不同的表现形式, 同一个接口使用不同实例执行不同的操作
-
优点
- 消除类型间的耦合
- 可扩充
- 简洁灵活
-
三个必要条件
- 继承
- 重写
- 父类的引用指向子类对象
-
实现方式
- 重写
- 接口
抽象类
- 抽象类除了不能不能被实例化外, 类的其他功能依然存在
- 在java中通过abstract定义抽象类
- 抽象方法: 如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法
- 抽象方法只有方法名没有方法体
- 如果一个类包含一个抽象方法, 那么该类必须是抽象类
- 任何子类都应重写父类的抽象方法, 或者声明自身为抽象类
封装
-
优点
- 良好的封装能减少代码的耦合性
- 类内部结构自由修改
- 对成员变量进行更精准的控制
- 隐藏信息实现细节
-
步骤
- 修改属性的可见性为私有属性
- 对方法使用public提供对外的公共访问
接口
- 桶ts接口: 需要在前面加上可见度, public interface a {}
枚举
- java中枚举一般用来表示一组常量
enum color {
Color, Green, Blue
}
public class Test
{
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
包
- 作用
- 包功能相似或相关的类或接口放到同一个包中方便类的查找和使用
- 同文件夹包采用树结构, 同一包内的类名不同, 不同包里的类名可以相同
- java使用包为了防止命名冲突提供搜索和定位类, 接口, 枚举等
- 语法格式
package pk1 [pk2 [pk3...]]
- java中包的作用把不同的java程序分类保存, 方便的为其他java程序调用
- 步骤
- 创建一个包里面的文件头部加入package 包名
- 在包内定义好接口类等
- 使用时用 import 进行引入使用
// 包内的接口
// 定义一个动物包, 接口文件
package animalPackage;
// 定义一个类接口包括吃和动两个函数
public interface anInterface {
public void eat(String food);
public void move(String yd);
}
// 包内的类
package animalPackage;
// 动物包里类的实现
public class anClass implements anInterface{
public void eat(String i){
System.out.println(i);
}
public void move(String i){
System.out.println("我会" + i);
}
public static void main(String[] args) {
anClass a = new anClass();
a.eat("肉");
a.move("飞");
}
}
// 包的使用
import animalPackage.anClass;
// 主函数
public class Animal {
public static void main(String[] args) {
// 使用动物类包
anClass animal = new anClass();
animal.eat("吞天噬地");
}
}