[JAVA] JAVA基础

一、堆区和栈区

  1. 栈中主要存放一些基本类型的变量。
    (int, short, long, byte, float, double, boolean, char)和引用类型数据的内存地址。

  2. 堆中主要存放引用类型的数据。

  3. 栈的存取速度比堆要快。

  4. 栈数据可以共享。

  5. 栈的数据大小确定的,堆中数据大小可变。

二、数据类型自动转换

  1. 如果一个操作数为double型,则整个表达式可提升为double型。

  2. 满足自动类型转换的条件:两种类型要兼容,数值类型(整型和浮点型)互相兼容,目标类型大于源类型(例如:double型大于int型)。

  3. 强制转换: 如double b=3.98; int a=(int)b;

三、接收键盘输入

public static void main(String[] args){
  Scanner input=new Scanner(System.in);
  System.out.println("请输入一个数据:");
  //String s=input.next();
  int y=input.next.int();

  System.out.println("输出"+(y+5));
}

四、获取随机数

Math.random()
获取0-1内一个随机浮点数,不包含1。

Random e = new Random();
e.nextInt(10);
获取0-10内一个随机整数,不包含10。

五、保留2位小数

double a=15.3;
double b=3;

DecimalFormat df =new DecimalFormat("0.00");
String s=df.format(a/b);
double result=Double.valueOf(s);

System.out.println(result);

六、数组

  1. 定义:
//动态初始化
int[] a;
a = new int[3];
a[0]=8;
a[1]=8;
a[2]=8;

//静态初始化
int[] b=new int[]{1,2,3,4,5};
int[] c={6,7,8,9};
  1. for-each循环
    语法:
    for(元素类型 元素变量:要遍历对象){
    循环语句;
    }
    for each循环执行次数取决于遍历的对象元素个数。

  2. 数组增加元素

int[] oldArray={1,2,3,4,5,6,7};
int[] newArray=new int[oldArray.lenght+1];

for(int i=0;i<=oldArray.lenght-1;i++){
  newArray[i]=oldArray[i];
}
newArray[newArray.lenght-1]=0;

for(int x:newArray){
  System.out.printIn(x);
}
  1. Arrays工具类
    Arrays.sort(array);//排序
    Arrays.toString(array);//转字符串

七、排序

  1. 冒泡排序
    每次拿前一个值跟后一个值进行比较,如果前一个值大,就交换;
    每一轮会把当前的最大值交换到最后,直到排序成功。

  2. 选择排序
    依次在数组中选择一个值,跟后面所有的值进行比较;如果有值比这个值小,就交换。

  3. 插入排序
    把数组分成左右两部分,假设左边部分已经完成排序;依次从第二个元素开始,把每个元素插入到左边合适的位置。

八、类和对象

八-1 方法

  1. System.out.println()

println()是一个方法。
System是系统类。
out是标准输出对象。
这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。

  1. 什么是方法?
    Java方法是语句的集合,它们在一起执行一个功能;
    方法是解决一类问题的步骤的有序组合;
    方法一般包含于类中;
    方法在程序中被创建,在其他地方被引用。

  2. 方法的优点
    使程序变得更简短而清晰;
    有利于程序维护;
    可以提高程序开发的效率;
    提高了代码的重用性。

  3. 方法定义格式
    访问修饰符 返回值类型 方法名(参数类型 参数名){

方法体

return 返回值;
}

八-2 类和对象

  1. 属性和方法是对象的基本构成。

属性:对象具有的各种特征,每个对象的每个属性都拥有特定值。
例如:张浩和李明的年龄、姓名不一样。

方法:对象执行的操作。

对象:用来描述客观事物的一个实体,由一组属性和方法构成。
对象同时具有属性和方法两项特性,对象的属性和方法通常被封装在一起,共同体现事物的特性,二者相辅相承,不能分割。

  1. 类和对象
    类是模子,定义对象将会拥有的特征(属性)和行为(方法)。
    类是对象的类型,对象是类的对象。

类是抽象的概念,仅仅是模板,比如:人。
对象是一个你能够看得到、摸得着的具体实体。

  1. 面向对象的思维

  2. 定义一个类
    所有JAVA程序都以类class为组织单元,我们使用关键字class定义类。

  3. 创建对象的步骤
    类名 对象名=new 类名();
    引用对象成员:使用“.”进行以下操作。
    引用类的属性:对象名.属性
    引用类的方法:对象名.方法名()

  4. this
    this表示当前对象
    作用:获取当前对象的属性;使用this调用构造方法。

  5. static可以修饰属性和方法

- static修饰 非static修饰
属性 类属性、类变量、静态变量 实例属性、实例变量
方法 类方法、静态方法 实例方法
调用方式 类名.属性
类名.方法()
对象.属性
对象.方法()
对象.属性
对象.方法()
归属 单个对象

九、面向对象三大特性

封装、继承、多态

封装:

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的步骤:1)修改属性的可见性(设为private)2)创建公有的getter/setter方法(用于属性的读写)3)在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)。
使用private修饰的属性和方法只能在本类中被访问。
get()set()方法其实就是为封装而设计的。

  1. 4种访问修饰符
    访问修饰符可以用在类、方法、属性上面。
访问修饰符 本类 同包 子类 其他
private ☑️
默认(friendly) ☑️ ☑️
protected ☑️ ☑️ ☑️
public ☑️ ☑️ ☑️ ☑️

继承:

子类和父类是is-a的关系。
使用继承:编写父类class Pet{//公共的属性和方法} 编写子类,继承父类class Dog extends Pet{//子类特有的属性和方法} class Penguin extends Pet{//}。
子类继承父类后,自动拥有父类非私有属性和方法。一个父类可以被多个子类继承。在java中,一个子类只能继承一个父类。
子类不能继承父类的情况:(1)private成员(2)子类与父类不在同包,使用默认访问权限的成员(3)构造方法。

  1. super关键字
    子类访问父类成员
    (1)访问父类构造方法
    super();
    super(name);(在子类构造方法中)需要写在子类构造方法的第一行。
    (2)访问父类属性
    super.name;
    (3)访问父类方法
    super.print();

  2. final修饰符
    final可以用来修饰类、方法、变量;

final修饰的类不能被继承;
final修饰的方法不能被子类重写;
final修饰的变量不能改变值。

  1. Object类
    Object类是所有类的最终父类。

==:地址是否相同。
object类中的equals()方法和==意义相同。
字符串是一个类,也有equals()方法,但是字符串类对equals方法实现了重写。

重写object类中的equals()方法

多态:

同一个引用类型,使用不同的实例而执行不同操作。
使用多态的条件:编写具有继承关系的父类和子类;子类重写父类方法;父类引用指向子类的对象。
多态中有向上转型和向下转型。(向上转型是将子类对象转为父类对象使用;向下转型是将父类对象转为子类对象使用。)instanceof

  1. 抽象类
    抽象类只能被继承,不能被实例化。
    抽象类中可以有普通方法,也可以有抽象方法。(抽象方法没有方法体。父类定义的抽象方法,子类必须实现(重写),除非子类也是抽象类)

定义抽象类和抽象方法的目的:
1)使得父类更加简洁纯粹,只做规范而不用涉及具体内容;
2)对子类的方法进行了规范,方便统一管理和团队协同开发;
3)抽象类专门为继承而生。

  1. 接口类
    继承:is-a的关系; 接口:has-a的关系。

接口:
public interface MyInterface{
public void foo();
//其他方法
所有方法都是:public abstract
}

接口不可能被实例化;
实现类必须实现接口的所有方法;
一个类可以实现多个接口;
接口中的变量都是静态常量。

接口的存在可以解决Java中不能多继承的问题。

接口类属性是全局静态常量;接口类方法必须是public抽象方法;没有构造方法;无法实例化。

你可能感兴趣的:([JAVA] JAVA基础)