(谁能想到面前端笔试要考javaヾ(≧▽≦*)o)
主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行
所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始
首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
合法标识符举例:$joepear、_value、__1_jql
非法标识符举例:12jql、-jql
继承
被继承的类称为超类,派生类称为子类。
接口
接口可以理解为对象间相互通信的协议。接口值定义派生类用到的方法,方法的具体实现完全取决于派生类。
构造方法
每个类都有构造方法,如果没有显式为类定义构造方法,java编译器会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法必须与类同名,没有返回值,一个类可以有多个构造方法。不能直接调用构造方法,要用new关键字来自动调用。Java的类都要求有构造方法,如果没有,java编译器会提供一个不带参数的构造方法(缺省的构造方法)
类是一个模板,描述一类对象的行为和状态。对象是类的一个实例,有状态和行为。
局部变量:在构造方法或者语句块中定义的变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。在栈上分配。没有默认值。
成员变量:成员变量都是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法,构造方法和特定类的语句块访问。默认值为0(int),false(boolean),null(引用类型)。
public 修饰符在子类可见,private 仅在该类可见
类变量:类变量也声明在类中,方法体之外,必须为static类型。静态变量不属于某个实例对象,而是属于类。无论有多少个对象,类只有类变量的一份拷贝。存储在静态存储区。有默认值,认值为0(int),false(boolean),null(引用类型)。
成员变量(实例变量)和类变量(静态变量)的区别:
1. 生命周期不同
成员变量随对象的创建而存在,对象回收后释放。实例化后才能使用。
类变量随类的加载而存在,类消失了就消失。
2. 调用方式不同
成员变量只能被对象调用。
静态变量可以被对象和类名调用。
3. 别名不同
成员变量也叫实例变量。
静态变量也叫类变量。
4. 数据存储位置不同
成员变量存储在堆内存的对象中。
静态变量数据存储在方法区(共享数据区)的静态区。
成员变量和局部变量区别
1. 声明位置不同
成员变量(属性)在类中声明。
局部变量在方法中或代码块。
2. 初始值不同
成员变量没有赋值则有默认值,数据类型不同则默认值不同。
局部变量没有默认值,必先声明,再赋值,才能使用。
3. 一个类中,局部变量和成员变量同名时,局部变量优先。要访问成员变量的属性,要加上this.。this表示这个对象。
new关键字的作用
1. 在堆中为对象分配内存空间
2. 调用对象的构造方法
3. 为对象返回一个引用(如果不是new,而是引用,则在堆中存放对象的地址)
判断要不要用static
加了static,特有的数据可能会变成对象的共享数据。
静态方法只能访问静态成员,不能访问非静态成员。
静态方法中不能使用this,super关键字。
this和super
this 指向对象的指针,形参与成员名字重名,用this来区分
super 父类对象的一个指针
成员变量
如果是对象的特有数据,不要用static。
成员函数
如果不要访问特有数据,需要用static修饰
创建对象
对象是根据类创建的。在java中,使用关键字new来创建一个新的对象。需要三步:
- 声明 声明一个对象,包括对象名称和类型
- 实例化 用new来实例化一个对象
- 初始化 用构造方法初始化对象
public class dog{
public dog(String name){
System.out.println(name);
}
public static void main(String[] args){
dog mydog=new dog("to");
}
}
源文件声明规则
- 可以在一个源文件中定义多个类,可以有多个非public类,但只能一个public类。因为java程序从一个public的main函数开始执行。
- 源文件的名称和public类的类名保持一致,因此在引用其他类时无需显式声明。
- 如果一个类定义在某个包中,那么package语句放源文件的首行
- import语句(如有)放在package和类定义之间。如果没package,import放在源文件最前面。
- package的作用是防止名字相同的类产生冲突。package jql.msn编译器就将该.java文件下的每个类生成到./jql.msn这个目录。
- import简化package之后的实例化代码。./jql/msn/下有A类。
- 没有import,实例化A类为new jql.msn.A()。
- 若有import,可以直接new A().
不显式调用构造函数
public class People{
int age = 23;
public void getAge(){
System.out.print(age);
}
public static void main(String []args) {
People xiaoMing = new People();
xiaoMing.getAge();
}
}
//输出23
内部类
public class Person {
private int age;
public class H1 {
public void test() {
System.out.println(age);
}
}
public class H2 {
public void test() {
System.out.println(age);
}
}
}
内部类的优点和缺点
优点:可以访问外部类的私有属性
缺点:破坏原有类的程序结构
类的类型 抽象类和final类。
Java 基本数据类型
Java有八种基本类型,其中6个数字类型(4整数类型,2浮点类型),1个字符类型,一个布尔型。
byte、short、int、long、float、double、char、boolean(默认值false)
引用类型
引用类型指向一个对象,指向对象的变量是引用变量。所有引用类型的默认值都是null。
常量
用final关键字来休止常量
final double PI = 3.1415927;
转义字符
- \r 回车
- \f 换页
- \b 退格
- \s 空格
- \ddd 八进制字符
自动类型转换
byte,short,char—> int —> long—> float —> double
不能把布尔类型进行类型转换
不能把对象类型转换成不相关类的对象
Java中使用long类型的数据要在后面加上L,否则作为整数解析
long value = 9223372036854775807L;
不然报错
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The literal 9223372036854775807 of type int is out of range
Java修饰符
访问修饰符
- default 在同一package内可见。用于类、接口、变量、方法。
- private 在同一类内可见。用于变量、方法。(不能修饰类)。(可以通过类中的getter方法被外部类访问)。
- public 对所有类可见,用于类、接口、变量、方法。
- protected 对同一package中的类和所有子类可见。不在同一包中,只能访问从基类继承而来的protected方法。用于变量、方法。(不能修饰类)。
访问修饰符注意事项
-
父类中声明为 public 的方法在子类中也必须为 public。
-
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
-
父类中声明为 private 的方法,不能够被继承。 非访问修饰符
-
static 静态变量 同上文
静态方法 独立于对象的静态方法。静态方法不能使用类的非静态变量。 -
final
修饰常量
修饰方法 可以被子类继承,不能被子类重写。(放置该方法的内容被修改)
修饰类 final类不能被继承
- abstract
抽象类 不能用来实例化对象。抽象类的唯一目的是对该类进行扩充。
一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类。但是抽象类里可以有或没有抽象方法和非抽象方法。
抽象方法 一种没有任何实现的方法。不能被声明为final和static。抽象方法的声明以分号结尾,例如:public abstract sample();。
public abstract class SuperClass{
abstract void m(); //抽象方法
}
class SubClass extends SuperClass{
//实现抽象方法
void m(){
.........
}
}
- synchronized
声明的方法同一时间只能被一个线程访问
public synchronized void showDetails(){ ....... }
- transient
java 虚拟机(JVM)跳过该特定的变量。该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
- volatile
在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java运算符
^ 异或
">>>" 按位右移补零,移动得到的空按0补充。 A为60,二进制111100 A>>>2为00001111。A>>2为1111.
短路逻辑运算符
&& 第一个操作为false,结果必为false,不会进行第二个操作。
instanceof 检查该对象是否是一个特定类型。
String name = "James";
boolean result = name instanceof String;
子类是父类的类型,但父类不是子类的类型。 子类的实例 instanceof 父类,true
整数运算
如果两个操作符中有一个为long,结果为long。
没有long,结果为int,即使操作数权威short,byte,结果也是int。
Java增强for循环
for(声明语句 : 表达式)
{ //代码句子 }