☕java ['dʒɑvə]
基础数据类型类型自动提升与强制转型在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。例如,short 和int 计算,结果总是int ,原因是short 首先自动被转型为int 小的总是被转成大的, 大的放进小的里面就会溢出 数值型字面值默认情况下,整形字面值是一个十进制整数 二进制整数字面值,在数字前使用0b 或者0B , 如0B1111(15) 八进制整数字面值,在数字前使用0 , 如07777(4095) 十六进制整数字面值,在数字前使用0x 或者0X , 如0XFFFF(65535) 补码运算中经常用到&0xff
正数存储的二进制原码, 负数存储的是二进制的补码。 补码是负数的绝对值反码加1。
0xFF的二进制表示就是:1111 1111 计算机存储数据机制:
String 类型String对象简单方法I/O输入import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
System.out.print("Input your name: "); // 打印提示
String name = scanner.nextLine(); // 读取一行输入并获取字符串
System.out.print("Input your age: "); // 打印提示
int age = scanner.nextInt(); // 读取一行输入并获取整数
System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
}
} 输出输出快捷键 syso Alt + / 格式化控制台输出 System.out.printf
%域宽度 . 精度 转换码
方法方法的定义由方法名称、参数、返回值类型以及方法体组成
语法方法头 修饰符 返回值类型 方法名 (参数列表 ){ // 方法体 }
定义在方法头中的变量称为形式参数(formal parameter) ,简称 形参(parameter [pə'ræmɪtər]) 调用方法时,给参数传一个值,这个值称为实际参数(actual parameter) 或实参 参数列表 (parameter list) 指明方法中参数的类型、顺序和个数。 方法名 和 参数列表 一起构成 方法签名 (method signature) 方法头中需要对每一个参数进行单独的数据类型声明
使用方法能够带来代码的共享和重用, 类中通过使用类名 .方法名 来调用方法
每调用一个方法,系统会创建一个活动记录(/活动框架),用于保存方法中参数和变量。 活动记录置于一个内存区域,称为调用栈(call stack), 也称为 执行栈、运行时栈、机器栈,常简称为 “栈”。 方法运行结束,相应活动记录就被释放。 当调用带参数的方法时,实参的值传递给形参,这个过程称为按值传递 (pass-by-value) 如swap(n1, n2), swap(num1, num2)交换方法中 n1和n2有自己独立于num1和num2的存储空间 n1和n2的改变不会影响num1和num2的内容
重载方法重载方法(overload):使用同样的名字,不同的参数列表来定义不同的方法
变量作用域数组定义int[ ] arr;
int arr[];//不推荐 初始化不允许在前面的括号写元素个数 静态初始化 int[ ] arr = new int[ ] {1, 2, 3}; int[ ] arr = new int[3];
arr[0] = 1; 动态初始化 二位动态数组初始化,行号必须写,列号可以省略 int[ ][ ] arr = new int [3][ ];
arr[0] = new int [3]; //0行有三列 int [ ][ ] arr = new int[3][2];
arr [0][0] = 3; 数组类型传值,参数是数组的引用,传递的是数组的引用。即传递共享信息 (pass-by-sharing) 数组存储在堆中,传递时,尽管是两个独立变量,但指向同一个数组
随机数random 方法
面向对象面向对象程序设计的三大支柱是封装、继承和多态
类 为 对象 定义属性和行为 对象状态 (属性) 由数据域与当前值表示。 对象行为(动作)由方法定义。 创建对象的过程称为实例化(instantion) java类使用变量定义数据域,使用方法定义动作。 类中提供一种称为构造方法(constructor) 的特殊类型方法,调用它可以创建新的对象。 包含main方法称为主类,没有main方法的类无法运行。 可以把两个类放在同一个文件中,但文件中只能有一个类是公共(public)类,并且,公共类必须与文件同名。
构造方法使用new操作符调用构造方法创建对象
构造方法必须与所在类名字相同 没有返回值类型,甚至连void也没有 在创建一个对象时由new操作符调用,作用是初始化对象 通常,类会提供一个没有参数的构造方法(称为无参构造方法) 在一个类中用户没有定义构造方法时,类中会隐式定义一个方法体为空的无参构造方法,称为默认构造方法,当且仅当类中没有明确定义任何构造方法时自动提供。
通过引用变量访问对象向方法传递对象参数将对象的引用传递给方法 执行程序中的方法 调用堆栈 对象存在堆中
静态变量和静态方法静态变量(static variable),也称为类变量 声明一个静态变量或定义一个静态方法,就要在这个变量或方法的声明中加上修饰符static
可见性修饰符可见性修饰符 指明 类中的数据域和方法 是否能在该类之外被访问 该类之内对数据域和方法 的访问是没有限制的
没有使用可见性修饰符,默认类、方法和数据域是可以被同一个包中任何一个类访问的。 private 限定方法和数据域 只能在 它自己类中被访问。
修饰符private只能应用在类的成员 上 修饰符public可以应用在类 或类的成员 上 在局部变量(方法或函数里的变量) 使用修饰符 public 或 private都会导致编译错误 大多数情况下,构造方法都是公共的 使用private修饰符将数据域声明为私有的称为数据域封装 (data field encapsulation) 为了更新 被封装的数据域 提供设置方法来给数据域设置新值
获取方法称为访问器(accessor ['əksesər] 注意重音在前) public returnType getPropertyName( )
public boolean isPropertyName( ) 设置方法称为修改器(mutator mutate美 ['mju.teɪt]转变) public void setPropertyName(dataType propertyValue )
final用final 修饰的方法不能被Override 用final 修饰的类不能被继承 用final 修饰的字段在初始化后不能被修改 对final 字段重新赋值会报错 可以在构造方法中初始化final字段
this引用关键字this 引用对象自身, 也可以在构造方法内部调用同一个类的其他构造方法
public class Circle {
private double radius;
public Circle(double radius) {
this.radius = radius; //this关键字用于引用正在被构建的对象的数据域radius
}
public Circle() {
this(1.0) ; // this关键字用于调用另外一个构造方法
}
} java中要求,在构造方法中语句 this(arg-list) 应在任何其他可执行语句之前出现 一个类有多个构造方法时, 最好尽可能使用 this(参数列表) 来实现
类的关系类之间的关系通常有 关联、聚合、组合以及继承。
{ 关联 [ 聚集 (组合 )] } 关联 : 二元关系, 两个类之间 聚集 : 两个对象之间归属关系,和组合相似. 继承和多态继承父类 (parent class): 超类(superclass) ,基类(base class) 子类(subclass) : 继承类(extended class) , 派生类(derived class) 子类从父类中继承可访问的数据域和方法, 还可以添加新的数据域和方法 父类: 通用的类 子类:更特定的类 语法 public class Circle extends GeometricObject 在java中, 不允许多重继承 一个Java类只可能直接继承自一个父类, 这种限制称为 单一继承 (single inheritance)
super关键字关键字super代指父类, 可以用于调用父类中普通方法和构造方法
super( ) 或 super(arguments) ; 要调用父类的构造方法必须使用关键字super, 在子类中调用父类构造方法名字会引发语法错误 子类调用父类构造方法的语句必须是它构造方法的第一条语句 public Circle (double radius, String color, boolean filled) {
super(color, filled);
this.radius = radius;
} 构造方法链 当构造一个子类的对象时,子类的构造方法会在完成自己任务之前,首先调用它的父类的构造方法. 父类有参和无参的构造方法,子类会调用无参的构造方法 调用父类普通方法 super. 方法名(参数);
方法重写重写方法,需要在子类中使用父类一样的签名来对方法进行定义
|