Java语言特点:1.面向对象2.跨平台3安全性4.简洁性5.分布性6.多线程
Jdk:jdk中有java编译器 java运行工具 Java文档生成工具 Java打包工具
JAVA的基本语法:
Java的程序必须放在类中,用class关键子定义,前面加修饰符;
语法如下:
修饰符(publice)class 类名 //类名首字母必须大写
主方法:publice statice void main(String[] agrs){
写方法体
}
输出语句:System.out.println();
标识符与关键字:
程序往往需要定义一定名称(包、类名、方法体、参数名等)被称为标识符;标识符可以由任意顺序的顺序大小写、数字、下划线(-)和美元符号($)组成,但开头不能用数字开头,不能用关键字。
标识符有以下规则:
- 包名所以字母一lu小写
- 类名和端口名首字母大写
- 常量名所以字母都大写,单词之间用下划线连接
- 变量名和方法名的第一个单词小写,第二个单词大写
数据类型:
基本数据类型:
- 数值型:整数类型(byte、short、int、long),浮点型(float、double)
- 字符型(char)
- 布尔型:(boolean)
引用数据类型:类(class)、接口(interface)、数组、枚举(enum)、注解(annotation)
三元运算符“?:”
逻辑表达式?表达式1:表达式2
Int store=12
System.out.println(store<=12?”不”:”可”);
数组:
数组在java中的三种定义方法:
数据类型 [ ] 数组名 =new 数据类型[数据长度]
数据类型 [] 数组名 = new 数据类型 [] {元素、元素}
数据类型 [] 数据名 ={元素、}
二维数组:
类型 [][] 数组名称={{数组一},{数组二}}
语法:
类型 数组名[][]={{初始化值1},{初始化值2}};
类型 数组名 [][]=new 类型[长度][长度];
类型 数组[][] = new 类型[长度][];
类型 数组[][] =new 类型[][]{{初始值1},{初始值2}}
类和对象
面向对象的基本特征:1.封装(对方法进行和属性进行包装和隐藏起来)
2.继承:对有相同方法和属性进行继承使用3.多态
对象都有自己的特征,我们叫属性和方法
类和对象总结:
对象:是具体的事物,我们把叫做object,或者称instance
类:是对对象的抽象,叫class
类可以看成一类的模板,对象可以看成该类的一个具体实例
对象和类的关系:特殊到一般,抽象到具体
类是用于描述同一类型的对象的一个抽象的概念,类中定义了在一类对象所应具有的静态和动态属性
类的定义
语法:
<修饰符> class 类名 [extends 父名] [implements]
{ 变量的声明
方法体
}
<修饰符>:public、abstract、和final等
类的成员方法:
语法:
[修饰符] <返回值的类型> <方法名>( [参数]){
方法体
}
当省方法体时,外面的{}不能省
- 成员变量:在类中声明,在整个类中有效
- 局部变量:在方法内或方法内的复合代码块中声明的变量
对象的创建:
语法:
类名 对象名 = new 类名(形参);
构造方法的要点:
- 构造器的方法名必须和类名一致
- 通过new关键字调用
- 构造方法虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能 在构造器里调用return
- 如果没有定义构造器系统会生成一个无参的构造器,已有就不会生成
构造方法的重载:
- 方法的重载是一个类中方法名一样,但参数不相同的方法,调用时根据参数不同进行调用。
- 方法调用时根据最近原则
- 只有返回值类型不同不构成重载 int a(){}、void a(){}
- 只有形参的名不一样不构成重载
- 构造方法也可以重载
Static:
- 不需要对象就可以调用(类名.方法名)
- 在static中不可以调用非静态的方法
- 静态可以直接用类名访问进行调用
静态方法称为类方法,非静态方法称为实例方法
This:
This不能用于static方法
类的继承:
[修饰符] class 子类名 extends 父类名{
}
Super:
- 隐式调用父类构造方法:调用父类不带参数的构造方法
- 显式调用父类构造方法:
语法:super(参数1,参数2)
This:引用当前类的实例的成员变量(或方法)
Super:引用从父类继承的成员变量(或方法)
方法重写:
子类中定义一个方法,在个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且在个方法的名字、参数个数、参数的类型和父类的方法完全相同
重写父类的方法时,不可以降低的访问权限
多态:
多态性就是指父类的某个实例方法被其子类重写时,可以各自产生自己的功能行为
多态的必要条件:
- 继承
- 重写
- 向上转型(父类名 对象名 = new 子类名();
default:即不加任何访问修饰符,只允许在同一个包中进行访问
protect:介于public和private 之间的一种访问修饰符,一般称为“保护的”被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
Final:
如果成员变量或局部变量被修饰为final的,就是常量。
Final修饰成员变量:
如果在定义的时候没有指定初始化,则可以在后面进行赋值,但只能进行赋值一次,有指定的值时,不能进行赋值
Final修饰方法:
Final修饰的方法不能进行重写,如果想要不允许子类重写父类方法可以final修饰
语法:
Public class Father{
Public final void say(){
}
}
抽象类
抽象类不能实例化,它的子类才能实例化
语法:
[访问修饰符] abstract class 类名{
}
抽象方法:
抽象方法只有声明,没有具体的实例
语法:
[修饰符] abstract <返回值类型> 方法名();
- 抽象类不能被实例化,无法使用new关键字调用抽象类的构造器创造抽象类的实例,即使抽象类里不包含抽象方法,在个抽象也不能创建实例
- 抽象类的构造器不能用于创建实例,主要是用于子调用。 接口: 比抽象类还抽象,它只有抽象方法和常量语法: Public interface 接口名 {常量
1. 抽象方法
}
接口的实现:|
语法:
Class 类名 [extends f父类名] implements 接口1,接口2……..{
//实现方法接口的所有抽象方法
}
方法调用用向上转型
package test;
public interface Gou {
void jiao();
}
interface Cat{
void jiao();
}
interface Pig{
void jiao();
}
class Main11 {
public static void main(String[] agrs) {
Gou pe = new Gou() {
@Override
public void jiao() {
System.out.println("hanghang");
}
};
pe.jiao();
Cat pe1=new Cat() {
@Override
public void jiao() {//匿名类
System.out.println("maio");
}
};
pe1.jiao();
Pig pe2= new Pig() {
@Override
public void jiao() {
System.out.println("honghong");
}
};
pe2.jiao();
}
}