Java核心基础

数据类型

分为两大类:基本数据类型、引用数据类型

基本数据类型:

数据类型 特点
byte 8位 -128~127
short 16位 -32768~32767
int 32位 -2147483648~2147483647
long 64位 -263~263-1
float 32位 具体见IEEE 754标准
double 64位 具体见IEEE 754标准
boolean 1位 true/false
char 16位 0~65535

引用数据类型:
类、接口、数组……

数据类型转换:
(1)自动类型转换
byte→short(char)→int→long→float→double
(2)强制类型转换
上述链接的逆向.

int a=123;
byte b=(byte) a;

常量和变量

常量定义:

private static final double pi= 3.14;
转义字符 含义
\ddd 1~3位八进制所表示的字符
\uxxxx 1~4位十六进制数所表示的字符
\’ 单引号字符
\" 双引号字符
\\ 反斜线字符
\r 回车
\n 换行
\b 退格
\t 制表符

变量:

分为成员变量和局部变量

成员变量:包括实例变量和类变量,用static修饰的是类变量,不用static修饰的是实例变量,所有类的成员变量可以通过this来引用.
(1)定义在方法外
(2)整个类中都可以使用
(3)有默认初始值,int默认为0,float默认为0.0f,double默认为0.0
(4)位于堆内存
(5)随着对象的创建而创建,随着对象的消失而消失(实例变量)随着类的装载而创建,随着类的卸载而消失(类变量)

局部变量:1.方法参数(形参)2.方法局部变量(方法内定义)3.代码块局部变量(代码块中定义)
(1)定义在方法内部
(2)只适用于方法中
(3)没有默认初始值,需要手动赋值才能使用
(4)位于栈内存
(5)在调用对应方法时,局部变量因为执行创建语句而存在,超出自己的作用域则立即消失

运算符和表达式

算术运算符:+,-,*,/,%,++,- -
关系运算符:==,!=,>,<,>=,<=
逻辑运算符:&&,||,!
赋值运算符:=,+=,-=,*=,/=,%=
位运算符:<<=,>>=,&=,^=,|=

流程控制语句

switch语句:
(1)变量类型可以是byte,short,int,char
(2)每个case后面要跟上比较的值和冒号
(3)当变量和case中的值相同时,case后的语句开始执行,直到break
(4)如果没有break,程序会继续执行下一条case,直到出现break
(5)可以包含default分支,它必须是最后一个分支,不需要break

面向对象的三大特性

1.封装
将对象的属性和行为进行包装,不需要让外界知道具体实现的细节,只能通过定义的接口进行访问。
优点:减少耦合;可以自由修改内部结构;可以精确控制成员变量;隐藏信息,实现细节。

2.继承
通过继承,可以更有效率地对原有类的功能进行扩展。增强代码复用性,提高开发效率,为程序修改、补充提供便利。
Java中继承要使用extends关键字,只允许单继承。子类只能继承父类中可以访问的属性和方法。
(1)能继承父类public和protected的成员变量和方法,不能继承父类private的成员变量和方法
(2)对于父类的包访问权限成员变量和方法(default),如果子类和父类再同一个包下,则可以继承,否则不能
(3)如果子类的成员变量(方法)覆盖了父类的,则需要调用super关键字来引用

3.多态
多态是同一个行为具有多个不同表现形式或形态的能力。
可以把子类看成父类的对象,因此父类可以是很多种类型。
特性:对象实例确定则不可改变;只能调用编译时的类型所定义的方法;运行时会根据运行时的类型去调用相应类型中定义的方法。

类和对象

类是一个模板,描述一类对象的行为和状态。
对象是类的一个实例,有状态和行为。
1.类
类的声明:

public class sd {

}

类的方法定义:

public int f(int k){
  return k*k;
}

2.对象
对象的创建:

sd n=new sd();

构造方法:
(1)名称与类的名称完全相同
(2)不返回任何类型,不需要用void修饰
(3)作用是创建一个对象并初始化成员变量
(4)创建对象时,系统会自动调用构造方法
(5)一般用public修饰
(6)如果不定义构造方法,系统将提供一个默认的不带参数的方法体为空的构造方法
(7)构造方法可以重载,但是不能被继承
(8)不能被static,final,synchronized,abstract,native修饰

抽象类和抽象方法

1.使用原则
(1)必须是public或者protected
(2)不能直接实例化
(3)必须有子类
(4)子类如果不是抽象类,则必须重写全部抽象方法
(5)不能用final修饰,因为final不能有子类
(6)抽象类中不一定含有抽象方法,有抽象方法的类一定是抽象类
(7)抽象方法不能含有方法体
(8)构造方法,类方法不能是抽象方法
2.抽象方法的声明

abstract int f(int k);

抽象类可以继承实体类,前提是实体类必须要有明确的构造函数。
抽象类可以实现接口。

接口

1.接口的声明

public interface inter1 extends inter2,inter3{
}

2.接口的实现

public class sd implements inter1{
}

3.接口和抽象类的异同

相同点:
(1)都可以被继承
(2)都不能被直接实例化
(3)都可以包含抽象方法
(4)派生类必须实现未实现的方法
不同点:
(1)接口支持多继承,抽象类只能单继承
(2)一个类只能继承一个抽象类,却可以实现多个接口
(3)接口中的成员变量只能是public、static、final类型的;抽象类中的成员变量可以是各种类型的
(4)接口只能定义抽象方法;抽象类都能定义
(5)接口中不能含有静态代码块和静态方法;抽象类中可以有

其他一些问题

Java中的访问修饰符:
(1)public:可以跨类、跨包访问
(2)private:只能被该类本身访问
(3)protected:只能被本类及其子类访问
(4)default:只能在同一个包中进行访问

方法重载和方法覆盖:
重载:定义在同一个类中,方法名相同,参数个数、顺序、类型不同
目的:解决参数个数、类型、顺序不一致,但方法名一致的重命名问题
特点:
(1)发生在同一个类中
(2)方法名称相同
(3)参数个数、顺序、类型不同
(4)和返回值类型、访问修饰符、异常声明没有关系
(5)是多态的一种表现形式

覆盖:改写父类继承到子类的方法
目的:父类的功能实现无法满足需求,需要重写
特点:
(1)发生在具有父子关系的两个类中
(2)方法名称相同
(3)参数列表完全相同
(4)返回值类型必须相同
(5)访问修饰符不能严于父类
(6)覆盖是多态的必要条件
(7)抛出的异常不能比父类的异常大
(8)private的方法不能被覆盖
(9)构造方法不能被覆盖

值传递和引用传递:
值传递:将参数递给函数时,函数只接受一份副本。
引用传递:函数接收原始值的内存地址,修改该参数的值会使原始值进行改变。
Java中只有值传递参数。
由于Java中没有指针,所以没有引用传递参数。
Java用引用传递对象不意味着用引用传递参数。参数可以是对象引用。

类的反射:
(1)得到一个对象所属的类
(2)获取一个类所有的变量和方法
(3)在运行时创建对象
(4)在运行时调用对象的方法
获取Class类的三种方法:

Class class1 = Class.forName("User");
Class class2=User.class;
User user=new User();
Class class3=user.getClass();

获取对象实例:

//构造方法没有参数
User user1=(User)class1.newInstance();
//构造方法有参数
Constructor constructor=class2.getConstructor(String.class,Integer.class);
User user2=(User)constructor.newInstance("a",1);

Java创建对象方式:
(1)new语句
(2)反射机制的Class类的newInstance()方法
(3)通过clone()方法
(4)反序列化

你可能感兴趣的:(java,java)