java基础

本文详细介绍了Java语言的基本特性,包括其跨平台性依赖于JVM,面向对象的编程模型,以及解释型和编译型语言的特点。讨论了Java的数据类型,如基本类型和引用类型,以及类型转换规则。此外,提到了字符串处理、运算符优先级、控制结构(如switch语句)、多态性、构造器的作用、对象初始化过程,以及类和对象的继承与多态特性。文章还涉及了内存管理,如对象的创建、引用和垃圾回收,以及代码的调试工具和技巧。

1.Java的跨平台性:编译好的.class文件在不同操作系统上都可以运行(因为安装了jvm)
2.java是面向对象的
3.java是解释型语言:编译后的代码不能直接被机器执行,需要解释器;编译型语言在编译后可以直接被执行:e.g.:C,C++
4.jdk=jre+开发工具集(e.g.:javac,java等)
jre=jvm+java SE标准类库(java核心类库)
如果只想运行.class 文件,只安装jre即可
5.xx.java是源文件,.class是字节码文件
6.一个源文件最多只能有一个public类,其他类个数不限
7.编译后,每一个类都对应一个.class文件
8.转义字符\\:输出两个\(\表示后面的一个字符是字符串的一部分,不是转意用的)
9.\r是换行,光标移到同一行的最左侧,不是下一行,因此要搭配\n使用(\r\n)
10.文档注释:
/**
*@version 1.0
/
11.shift+tab整体左移
12dos命令:echo ok>hello.txt (表示向文件hello中写入ok,如果没有则创建新文件)
13.System.out.println(“100”+98) 输出是10098
14.java数据类型有两大类:1)基本数据类型,2)引用类型。
基本数据类型:
整数类型,byte1,short2,int4,long8 (一个字节等于八位,一个字节存放2的1次方【0,1】)
浮点数float4,double8,
字符型char2, (一个汉字占2个字节)
布尔型boolean1 (共8种数据类型)
引用类型:类(e.g.:String),接口,数组
15.int n2 = 1L (这样1L就变成long型)所以这句话会报错
16.浮点数 = 符号位 + 指数位 + 尾数位 (小数都是近似值)
17.java浮点型常量默认问double,声明float类型常量时,需要后面加F,f
e.g.float num1 = 1.1F(加上F才对)
double num2 = 1.1(f) 加不加都对
18. double num2 = 8.1/3 输出2.666666669 (因此在对计算出来的小数进行相等判断时,要小心)
正确的写法: if(Math.abs(num2-num1)<0.000001)
19. char c1 = 97 对的,字符类型可以直接存放一个数字,但输出的是97表示的unicode字符,因此char是可以进行运算的
20. ASCLL 编码表表示128个字符 占用1字节,unicode占用两个字节
utf-8(字母1字节,汉字3字节),gbk(字母1字节,汉字2字节)
21.Java的自动类型转换:精度小的类型自动转换为精度大的类型。
数据类型按精度大小排序char-int-long-float-double;
byte-short-int-long-float-double
22.当把具体数赋值给byte时,如果在byte的范围内(-128-127)就可以,如果是把变量赋给byte,值在范围内也不可以。
23.byte,short,char三者可以相互运算,结果是int类型的(byte+byte也是int)
24.boolean不参与类型转换
25.int n1 = 100;
String s1 = n1+“”;就可以(基本类型+“”即可)
字符串转换成char,是取字符串的第一个字符
26.整数默认类型是int,e.g.10/4=2
27.a%b = a-(int)a/b
b (当a是小数的时候,需要注意括号里转换成int的步骤)
28.&逻辑与;&&短路与;或同理;^逻辑异或(不一样才为真)
29.x++==5先比较,再自增; 赋值也同理 int a = b++;
30.复合赋值运算会自动类型转换(e.g.: +=,-=,++)
31.命名规范:包名,所有字母都小写;类,接口名 单词首字母大写(大驼峰XxxYyy;小驼峰xxxYyy),常量 所有字母都大写TAX_RATE
32.java接收用户键盘输入: Scanner input = new Scanner(System.in);
33.计算机是以补码来运算的,java没有无符号数;负数的反码是原码除了符号位取反,补码是反码+1(正数三个码都一样)
34.>>相当于除2,<<相当于乘2
35.自增优先级高于±,低于赋值
36.多分支可以没有else
37.switch表达式的值必须是(byte,shore,int,char,enum,string)
38.switch 的每个case里如果没有break,会顺序执行
39.break可以指定标签,表示退出哪一层循环体
40.数组在默认情况下是引用传递,传递的是地址
41.new的空间如果不被引用 会呗当成垃圾回收(如何知道是否在接下来被引用了呢,编译原理?)
42.冒泡:for(int i=0; i<len-1; i++)
for(int j=0; j<len-1-i; j++)
如果在某一轮发现一次交换都没有,则可以提前终止了
43.二维数组里面的每个一维数组大小可以不一样:int[][] = new int [5][],√
21. int [] a = new int[3]{1,2,3} × 中括号里不应该有3
45.字符串放在常量池,基本数据类型存在堆,e.g.int
46.栈:局部变量
堆:对象,数组
方法区:常量池(e.g.字符串),类加载信息(只加载一次)
47.java创建对象流程:加载类信息,在堆中分配空间,地址赋给p(p在栈里)
48.方法不能嵌套定义
49.同一个类的方法不用创建对象,可以直接调用,
50.返回类型不是构成方法重载的条件,必须参数列表不同(顺序不同也行)
51.可变参数:public int sum(int…num){} 表示可以接受0or多个int,可以当作数组使用,即nums[i]是对的,传入的实参可以直接是数组
52.可变参数必须放在最后,形参列表最多只能有一个可变参数
53.属性(全局变量)不赋值也有默认值,但局部变量不行
54.构造器是用来完成对象初始化,不是用来创建对象。在创建对象时,系统自动调用该类的构造方法。
55.自己定义构造器之后,默认的就被覆盖了,不能再使用了
56.javap用来反编译class文件
57.对象初始化 三步 :默认初始化,显式初始化,构造器初始化
58.访问构造器方法:this(参数列表) 注意:只能在构造器中访问另一个构造器,且必须在第一句话
59.new test() 前面不加指针是匿名对象,即没有名字,只能用一次
60. System.out.println(a++)先输出再自增;
61.protected 对子类和同一个包中的类公开
默认:向同一个包的类公开
62.类只能被默认和public修饰
63.面向对象三大特征:封装(get,set),继承,多态
64.构造器里可以放set方法
65,在创建子类对象时候,会先默认调用父类的无参构造器,再调用子类,如果父类没有无参的,则必须在子类里用super指定用父类的哪个构造器,不然报错(注意:super()必须放在第一行,this()也必须放在第一行,因此两者不共存,super只在构造方法中使用,this是调用自己类指定的构造函数)
66.object是所有类的基类
67.super表示对父类的引用,可以super.属性/方法(私有不行)
68.super.feature 如果父类没有feature(注意:是没有,如果有,但是为私有,则报错),那就去找爷爷类,一直往上找。
69.重写:在子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同。

在重写方法时,需要遵循下面的规则:
参数列表必须完全相同。
返回的类型必须与被重写的方法的返回类型相同(Java1.5 版本之前返回值类型必须一样,之后的 Java 版本放宽了限制,返回值类型可以是父类方法的返回值的子类)。
访问权限不能比父类中被重写方法的访问权限更低(public>protected>default>private)父public,子private ×。
重写方法不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。例如,父类的一个方法声明了一个检査异常 IOException,在重写这个方法时就不能抛出 Exception,只能拋出 IOException 的子类异常,可以抛出非检査异常。

70.重载:同一个类中定义多个同名方法,它们的形参列表不同。对返回类型无要求

71.多态:父类引用指向子类对象(向上转型)。一个对象的编译类型和运行类型可以不一致,=左边是编译类型,右边是运行类型,运行类型是可以变化的。看是否报错 或 运行父类还是子类函数,记住编译期间看左,运行期间看右。
animal a = new cat(); a可以调用animal的方法,不能调用cat的方法。
父类类型的引用可以调用父类中定义的所有属性和方法(private不可以,遵守访问规则),而对于子类中定义而父类中没有的方法,它是无可奈何的;

对于父类中定义的方法,如果子类中重写(不是重载)了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接

72.多态的向下转型(当父类引用想调用子类特有方法时):子类引用 =(子类类型)父类引用;可以强转父类引用,不可以强转父类对象。可以调用子类类型所有成员。要求父类引用必须指向当前目标类型的对象:

即animal a = new cat();
cat c = (cat) a;√ 向下转型
dog d = (dog) a;×

73.属性没有重写一说,属性的值看编译类型,方法看运行类型

74.instance of判断对象的运行类型是否是xx或xx的子类型
75.boolean不能转成int
76.对象==对象,比较的是地址
77.java动态绑定机制(重要):animal a = new cat(); 如果a调用say()方法,则先去看运行类型(即cat类)里有没有,没有再向上查找,如果父类say()里调用了getI()方法,则还是先去运行类型里找有没有getI(),没有再找父类,属性则是哪里调用就用哪的。
78.多态数组:数组定义类型为父类类型,里面的元素是子类类型
79.多态参数:方法定义的形参为父类,实参可以是子类
80.==比较基本类型:判断值是否相等(int i = 10;double = 10.0:他俩相等)
== 比较引用类型,判断地址是否相等(Integer i = new Integer(5)这也是引用类型)
equals:只能判断引用类型;object的equals方法在其它类中会被改写,e.g.integer类中,equals比较两个int对象值是否相等
81.java所有类都是object的子类,包括integer等(包装类就是把八大基本类型封装为类。Object类可以接受所有引用类型,但基本类型则不能接收,为了让Object可以达到接收,则把基本类型封装为类,Java中一切内容,一切皆对象。)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值