Java先编译成字节码,后用JVM解释字节码。
它一次只将字节码中的一个指令翻译为目标机器语言代码,翻译完一步之后就立即执行,而不是将整个程序一起翻译。
用final声明常量,例:final int a = 1;
利用Scanner类创建一个对象,并将它的引用值赋给变量input。例:double radius = input.nextDouble();
明确导入 import java.util.Scanner;
通配符导入 import java.util.*;导入包中的所有类。
注意,除非要在程序中使用某个类,否则被导入包中的这些类的信息在编译时或运行时是不被读入的。导入语句只是告诉编译器在什么地方能找到这些类。
标识符是为了标识程序中诸如类、方法、变量等元素而采用的命名。
常量的所有字母都应该大写,两个单词之间用下划线连接
命名类时不要选择Java库中已经使用的名称。
当两个整数相除时,商是整数,小数部分被舍去。如:5/2=2;-5/2=-2;
Math类中包含pow方法
整型字面值默认是int类型的,为了表示一个long型的整型字面值,需要在其后加字母L,例如2147483648L或2147483648l,(推荐L)
要表示一个二进制整数字面值,在数字前使用0B或0b;
表示八进制,数字前加0,如0777;
表示十六进制,数字前加0X;
Java允许在一个数值型字面值的两个数字间使用下划线,如long ssn = 232_45_4519;
然而_45和45_是错误的,下划线必须在两个数字之间。
浮点型默认为double,可以在末尾加f或F表示该字面型为float,
科学计数法,如1.23456E2,或1.23456E+2
这些数在计算机内部都是以科学计数法的形式存储的。
float的精度有7到8位,double的精度有15到17位。
计算顺序,首先计算乘法、除法和求余,最后执行加法和减法运算,同级按从左到右顺序计算。
int x = 2;System.out.println(x += 2);输出4
可以将一个数值赋值支持更大数值范围的类型的变量,如可以将long赋给float
Java可以自动扩大类型,但是缩小类型必须显式完成。(int)1.7
注意!Java中,增强赋值表达式实现为x1=(T)(x1 op x2),这里T是x1的类型,例:
int sum = 0; sum += 4.5; sum += 4.5; System.out.println(sum);输出8
例:可以使用(int)(x * 100 + 0.5)/100向上四舍五入为保留小数点后两位。
软件开发过程
需求规范、系统分析、系统设计、实现、测试、部署、维护。
(int)(Math.random()*10)返回0-9之间的随机整数
^亦或逻辑运算符 a^b等于a!=b
p1 || p2,若p1为ture,则不计算p2
p1 && p2,若p1为false,则不计算p2
操作符的优先级和结合规则
一元加减号>(type)类型转换>!(非)>乘除求余>二元加减法>比较操作符>(==.!=)相等操作符>(^)亦或>(||)条件与>(=.+=.-=等)赋值运算符
math类ceil(x).floor(x).rint(x).round(x)方法
math类在程序中使用,但是并没有导入,因为它在java.lang包中,在java程序中,java.lang包中的所有类是可以隐式导入的。
注意,字符串字面值必须括在双引号中,而字符必须括在单引号中。例:“A”是字符串,‘A'是字符
转义字符//为/,/"为",\b退格键,\t为tab键,\n换行符
如果整数转换为char类型,只用到该数据的低十六位,其余部分都被忽略。
要将一个浮点值转换成char型时,首先将浮点值转换成int型,然后将这个int值转换为char类型。
当一个char型数据转换成数值型,它的Unicode就被转换成某个指定的数值类型。
0 ~ FFFF的数可以隐式转换成字符型数据。不在此范围,需要显示转换。
Unicode,统一码,它为每种语言中的每个字符设定了统一并且唯一的二进制编码。
字符的比较是通过比较两个字符的Unicode值实现的。
Java的Character类提供isDigit等类
String类型不是基本类型,包含在String类中,是一个引用类型。
为方便起见,Java允许在不创建新变量的情况下,使用字符串字面值直接引用字符串。例:"Welcome to Java".length()
s.charAt(index)用于提取字符串s中的某个特定字符。
s.concat(s1)用于连接字符串。s3 = s1 + s2;
s.toLowerCase() s.toUpperCase()转换大写 s.trim()删除两旁的空格
string s = System.in.nextLine();
注意!为了避免错误,程序中不要在基于标记的输入后使用基于行的输入!原因在12.11.4中解释
String类的方法:equals(s1)\equalsIgnoreCase(s1)不区分大小写\compareTo比较\compareToIgnoreCase(s1)\startsWith(s1)以特定前缀开始\endsWith\contains子串
字符串不能用><等比较操作符来比较两个字符串。
??操作符==只能告诉你两个字符串是否指向同一对象,不能告诉你是否相等。
??String a = "asd"; String b = "a" + "s" + "d"; System.out.println(a == b);为什么是ture
s.subString(beginIndex)\s.subString(beginIndex,endIndex)位于endIndex索引位置的字符不会返回
s.indexOf(ch)\s.index(ch,fromIndex)\indexOf(s)\indexOf(s,fromIndex)\lastIndex(ch)\lastIndex(ch,fromIndex)返回fromIndex之前出现的第一个ch的下标,lastIndexOf(s),lastIndex(s,fromIndex)
int a = "welcome java".lastIndexOf("java",8);System.out.print(a);输出8
字符串和数值之间的转换:
如将数值型字符串转换成数值。要将字符串转换成int值,使用Integer.parseInt方法。
如int intValue = Integer.parseInt(intString);
double doubleValue = Double.parseDouble(doubleString);
将数值转换成字符串,只需要简单地加上一个"",如String s = number + "";
用Unicode表示输出,例:System.out.println('\u0031');
'\uxxxx'表示Unicode编码十六进制表示的字符。例'\u003A'表示冒号:
浮点数以%f输出
《黑马Java》网课
int[] arr =new int[100]
arr存储在栈内存中,new int[]存储在堆内存中。
栈内存存储局部变量,堆内存存储new出来的内容
Java的Debug……
封装可以提高数据的安全性,因为在方法中可以对数据安全进行校验。
API:application programming interface应用程序编程接口
Java的API就是在JDK中提供的有各种功能的Java类
String在lang包下,不需要额外导入
string不可改变,但是可以被共享
使用时如同char[],但底层实现是byte[]
String的构造方法
public String()
public String(char[] chs)
public String(byte[] bys)
String s = "abc"
1.通过new创建的String对象,地址肯定是不同的
2.以“”给出的String对象,只要字符串内容相同,只会建立一个String对象
==比较:若比较基本类型,比较的是数据内容;若比较引用类型,比较的是地址值。
字符串比较内容应该使用.equals()方法
如果对String进行拼接操作,都会构建一个新的String对象,耗时又费空间。
StringBuilder 是一个可变的字符串类,我们可以看作是一个容器。
StringBuilder构造方法:StringBuilder()、StringBuilder(String str)
append(任意类型)添加,有个叫链式编程的东西,例:
sb.append("hello").append("world").append("!");
reverse()反转
把String转为StringBuilder 可以方便的使用reverse()
集合基础ArrayList,可调整大小的数组实现
import java.util.ArrayList;
Class ArrayList<E> E为此列表中元素的类型,泛型,一种特殊的数据类型
public ArrayList()
public boolean add(E e)
public void add(int index,E element)
ArrayList<String> array = new ArrayList<>();//jdk7以后的版本
array.add()添加元素
array.add(int index,Element e);
super关键字的使用与this相似,不过是父类的引用,可以访问构造方法、成员方法
子类的所有构造方法默认都会访问父类中的无参构造方法
因为子类会继承父类中的数据,可能还会使用父类中的数据。所以,子类的初始化之前,一定要先完成对父类的初始化。
每一个子类构造方法的第一句默认都是super()
如果父类中m欸有给出无参构造方法,只有带参构造方法,解决方案:
1.通过super关键字去显式的调用父类的带参构造方法
2.在父类中自己提供一个无参构造方法。