Java学习——基础语法
数据类型
- 自动类型转化
转化从低级到高级
byte->short->char->int->long->float->double
- 强制类型转化
容量大的类型转化为容量下的类型必须使用强制类型转化。
类型转化可能会导致溢出或损失精度
溢出问题的讨论,参考java问题集合
变量类型
-
类变量(静态变量)
在类中以static关键字声明,必须在方法外
第一次被访问时创建,程序结束时注销
通过ClassName.VariableName的方式访问。 -
实例变量
声明在类中,方法外声明
对象实例化时,实例变量确定
实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName(实例对象名称.变量名)。 -
局部变量
方法中声明
无默认值,初始化后使用
修饰符
访问修饰符
private,public,protected,default
protected可见性
protected权限用于类的继承。
基类的 protected 成员是包内可见的,并且对子类可见;
若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。
基础语法问题
本文用于记录刷题过程中,遇到的java技术问题
一、String 与 char 相互转化
String 转Char
1、使用String类 char charAt(int index)方法,用于获取index位置的char字符。
2、使用String类 char[] toCharArray()方法,将字符串转化为新的字符数组。
char转String
1、String s=String.valueof(char[] cs={‘a’,‘b’,‘c’,‘s’})
使用String类的 static String valueOf(primitive data type x)
注:
在leetcode翻转字符串问题中原地解法(比如 Java,JavaScript)中不适用,因为在这些语言中 String 类型是一个不可变的类型。无法直接替换单个字符。
二、数字越界问题
1.强制转化如何进行
数据类型 | 长度 | 内存表示 |
---|---|---|
int | 1字节 | 00000000 |
boolean | 1字节 | 00000000 |
char | 2字节 | 00000000 00000000 |
short | 2字节 | 00000000 00000000 |
int | 4字节 | 00000000 00000000 00000000 00000000 |
float | 4字节 | … |
long | 8字节 | … |
double | 8字节 | … |
**强制转化:**由数据类型 大转小 ,去掉左边部分,只保留转化后的剩余位数。 | ||
int 126 =>byte 126 00000000 01111110 =>01111110 | ||
数据没越界,数值正确 | ||
int 128 =>byte -128 | ||
00000000 10000000 =>10000000 | ||
由于10000000 是负数,所以10000000是补码 | ||
10000000=>01111111 (取反) | ||
011111111=>1000000 (加一) | ||
是-128 | ||
注: |
- 在计算机中凡是二进制数据类型,第一个数为1的是负数,第一个数为 0的正数,负数在内存中通过补码的形式存储.
- 负数的存储过程
1、先求出负数,绝对值的二进制数作为原码
2、原码取反,得到反码
3、反码+1的到补码,存入内存。
例:-7 00000111=>11111000=>11111001
2.实验结果
3.越界问题解决
用数组存储数据,根据运算法则,进行编码。java实现超长数4则运算