保姆级0基础学java之期末复习!
1.helloworld以及ideal的快捷键使用
package com.sxt;
import java.util.ArrayList;//导报
/**
* Created with Intellij IDEA
* Discripution:
* User:ALL
* Time:23:40
*/
public class hello {
/*
main方法 psvm
System.out.println(""); 字面常量.sout
ctrl+d 复制
代码块的移动 ctrl+shift+上箭头/下箭头
导包,生成变量 alt+enter
单行注释/取消 ctrl+/
多行注释/取消注释 ctrl+shift+/
代码块包围 ctrl+alt+t
构造方法,getter setter等等 alt+insert
*/
public static void main(String[] args) {
//1)String[] args数组的定义
// 字符串类型 char*p="hello" 数组中存的都是字符串
//数组是这样定义的
//int arr[10] ->int[10] ->vs调试的时候arr int[10]
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
//c:\Users\ALL\Desktop>java test ljj is huaidan
// java命令 运行时的命令行参数
//2)sout
System.out.println("7");//换行
System.out.print("7");//不换行
//用得最多的是前两个
System.out.printf("%d\n",21);//如c语言
}
}
/*多行注释
* 多行注释
* 不推荐 */
/**文档注释
* 常用于方法和类上描述方法和类的作用
* 可以被javadoc工具解析
* 生成一套以网页文件形式体现的程序说明文档*/
java->javac .class->java运行
注意该字节码文件是一个类对应字节码文件
2.数据类型和变量
2.1常量
常量即程序运行期间,固定不变的量
字面常量的分类
1.字符串常量,“”
2.整形常量 直接写整数
3.浮点数常量 直接写小数
4.字符常量, ‘’
5.布尔常量 true false
6.空常量 null
左值=右值
2.2 数据类型
- 数据类型
- 基本数据类型(简单)
- 整数 byte short int long
- 小数 float double
- 布尔值 boolean
- 字符char
- 引用数据类型
- 数组 字符串 类 接口 枚举 String
- 基本数据类型(简单)
- 变量
- 局部变量 在使用前一定要初始化
- 成员变量
%将ideal中的项目直接部属到github上
表达式:变量和运算符构成的
数据类型占的byte:
在Java里面没有所谓无符号有符号注意的说法
public class TestDemo{
public static void main(String[] args){
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
int a = 10;
long a = 10L;//10是长整形的类型 不加L会报错,小写l不推荐
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808
short a = 10;
System.out.println(Short.MAX_VALUE);//32767
System.out.println(Short.MIN_VALUE);//-32768
byte b1 =18;
byte b2 =180;//报错
//当Java使用=赋值一个字面值常量,超过范围后会自动检查字面值常量,斌且识别为int类型
System.out.println(Byte.MAX_VALUE);//127
System.out.println(Byte.MIN_VALUE);//-128
float f =12.5f;//如果不加f会默认12.5是一个double类型
//遵循c中float的存储
//包装类Float 不研究最大值最小值
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
char ch = '搞';
System.out.println(ch);
//java里面用unicode表示字符
//用记事本出现中文会有编码错误javac -encoding UTF-8 xxx.java
}
}
Integer 叫包装类 包装类即基本数据类型所对应的类类型
int —>interger[int的plus版本]
long 8个字节->数值:63bit -2^63 ~ (2^63)-1
short 2个字节->数值:15bit -2^15 ~ (2^15)-1
byte 1个字节 ->数值—:7bit -2^7 ~ (2^7)-1
float 4个字节
double 8个字节 双精度
char 2个字节 ->对应地包装类Character
boolean 可能8bit ->Boolean
布尔变量boolean
JVM中没有指定布尔元素大小
但是说boolean数组在JVM地实现中,Java编程语言中地布尔数组被编码成JVM字节数组,每个布尔元素使用8位
没有谱所谓地非0为真 0为假
int a = 1;if(a){
;}//报错
if(a!=0){
;}//正确
3.类型转换
显示隐
pubic class TestDemo{
public static void main(String[] args){
int a = 10;
long b = 20;
int c = a + b;//编译错误 a + b==>int + long --> long + long 赋值给int会丢失数据
int c = (int)(a+b);//强制类型转换
long d = a + b;//编译成功 int+long --->long + long赋值给long
}
}
由于cpu是按照4个字节为单位从内存中读取数据,byte short这种低于四个字节地类型 会提升成int再计算
4.string
+是拼接地意思 只要和字符串拼接就直接是字符串 不会进行运算
public class TestDemo{
public static void main(String[] args)
{
String st1 = "男神";
String st2 = "爱我";
System.out.println(st1+st2);
int a = 10;
int b = 20;
System.out.println("a="+a+"b="+b);
System.out.println("a+b=" +a+b);//都是字符串拼接
System.out.println("a+b="+(a+b));
System.out.println(a+b+"->a+b");//开始是整数后面字符串拼接
/*a=10b=20
a+b=1020
a+b=30
30->a+b*/
}
}
4.1 int与string互相转换
public class TestDemo{
public static void main(String[] args) {
//int转string
int num=1;
String str1=num+"";//法1
System.out.println(str1);//1
String str2=String.valueOf(num);//法2
System.out.println(str2);//1
//String转int
String str = "100";
int sum=Integer.parseInt(str);
System.out.println(sum);//100
}
}
5.运算符
5.1. 基本四则运算符:加减乘除模(+ - * / %)
注意:
都是二元运算符,使用时必须要有左右两个操作数
int / int 结果还是int类型,而且会向下取整
int a = 10;
int b = 20;
a + b;
a < b;
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数
- 做除法和取模时,右操作数不能为0
- % 不仅可以对整形取模,也可以对double类型取模,但是没有意义,一般都是对整形取模的
System.out.println(11.5 % 2.0);
// 运行结果1.5
- 两侧操作数类型不一致时,向类型大的提升
System.out.println(1+0.2); // +的左侧是int,右侧是double,在加之前int被提升为double
// 故:输出1.2
5.2移位操作符
- 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.<<
- 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.>>
- 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
- 移动负数位或者移位位数过大都没有意义.
方法签名:经过编译器修改之后最终的方法名字
方法全路径名+参数列表+返回值类型
关于调用栈
方法调用的时候,会有一个栈这样的内存空间描述当前的调用关系,称为调用栈
每一次方法的调用就称为一个栈帧,每一个栈帧中包括了这次调用的参数是哪些,返回哪里等消息
可以借用idea看到
基本数据创建的变量叫做基本变量,其变量空间存储的是所对应的值,
引用数据创建的变量叫做对象的引用,存贮的是对象所在空间地址
public static void func() {
int a = 10;
int b = 20;
int[] arr = new int[]{
1,2,3};
}
在上述代码中,a、b、arr,都是函数内部的变量,因此其空间都在main方法对应的栈帧中分配。
a、b是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。
array是数组类型的引用变量,其内部保存的内容可以简单理解成是数组在堆空间中的首地址。
array1=array2;
让array1去引用array2引用的空间,此时array1和array2完全是一个数组。
在方法中修改参数的值(基础数据),不影响实参的值。
修改引用数据类型的值,会影响实参的值
5.2.1总结:
所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只
是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).
有些知识点和c++没差 我就不写了哈 感觉好啰嗦 摆烂
6.构造方法
public class Date {
public int year;
public int month;
public int day;
//无参构造方法--内部给各个成员赋值初始值,该功能与三个参数的构造方法重复
//此处可以在无参构造方法中通过this调用带有三个参数的构造方法
//但是this(1900,1,1);必须是构造方法中第一条语句
public Date(){
this(1900,1,1);
//this.year=1900;
//this.month=1;
//this.day=1;
}
public Date(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public static void mian(String[] args){
}
}
this(…)必须是构造方法中第一条语句
不能形成环
public Date(){
this(1900,1,1);
}
public Date(int year, int month, int day) {
this();
}
/*
无参构造器调用三个参数的构造器,而三个参数构造器有调用无参的构造器,形成构造器的递归调用
编译报错:Error:(19, 12) java: 递归构造器调用
*/
6.1默认初始化
有个疑惑:局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?
public class Date {
public int year;
public int month;
public int day;
public Date(int year, int month, int day) {
// 成员变量在定义时,并没有给初始值, 为什么就可以使用呢?
System.out.println(this.year);
System.out.println(this.month);
System.out.println(this.day);
}
public static void main(String<