Java一

221 阅读8分钟

(谁能想到面前端笔试要考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来创建一个新的对象。需要三步:

  1. 声明 声明一个对象,包括对象名称和类型
  2. 实例化 用new来实例化一个对象
  3. 初始化 用构造方法初始化对象
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(声明语句 : 表达式)
 { //代码句子 }