Java精华学习笔记

1、IDEA的快捷键

ctrl+/ 注释

shift+ctrl+enter  用于刚创建类的时候,需要光标后移加回车,这个一步到位.还能补齐;

alt +enter   用于前面的变量定义 比如  new Scanner(System.in); 按这快捷键结果 Scanner scanner = new Scanner(System.in);

ctrl+n 查类的说明文档 比如Math类

fori回车直接打出循环

shift+tab向前退一格

ctrl+alt+t可以添for while   try catch 等

 

0、基础基础知识

1、标识符即名字其规则:由字母,数字,下划线和$组成,不能以数字开头 ,不能用关键字

业内规定:

类:首字母大写,驼峰命名法

包:小写字母组成,域名倒置

变量/方法:首字母小写,驼峰命名法,需要语义化,见名知意

常量:全部大写字母,单词之间下划线隔开 要加个final修饰,不可改变

关键字:Java官方用掉的名字

数据类型分为基本数据类型和复合数据类型或引用数据类型

2、一个字节(byte)=8个位(bit) 数据库里面的单位是字节

MySql里长度仅指定使用MySql命令行客户端选择数据时要显示多少字符

里面int永远是4字节也就是32位 TINYINT 是1字节

varchar里的长度是字节也是最大字节,会自适应实际的长度

正常一个汉字占2个字节可能是4,一个字母占1字节不分大小写

int 存储数值的范围是:-2的32次方--2的32次方减1,(也就是-247483648至147483647之间的所有正负整数),所以说int是不需要指定长度为多少的。

字节与位的区别:数据存储是以字节为单位,数据传输是大多是以位为单位

3、基本数据类型(四类八型):

整数类型: byte 8 short 16 int(默认) 32 long 64 数字是位数

浮点类型: float 32 double(默认) 64 单精度 双精度 float范围比long大因为它是小数的

字符型: char 只有这用单引号,其他基本都是双引号

布尔型 Boolean: true false

4、随机数

Random random = new Random(); //new出这个对象
int r=random.nextInt(2);  //调用这个对象的方法 范围是0~1的整数
int rr=random.nextInt(90)+10;//范围是10-99的整数
random.nextInt(1000)-500;//范围-500~500,500取不到

5、区别

break主要用于停止整个循环语句,循环语句后面的代码还会运行

continue用于循环里面让程序跳过当前循环,立刻进入下一次的循环

return用于返回方法类型指定的值也可以是对象,还能可以结束后面代码的执行

6、Scanner

Scanner sc=new Scanner(System.in);//new出这个对象
String s=sc.nextLine();//调用这个方法,从输入流获取你需要的输入

7、数据类型转换

短的变成,是自动转换;长的变短必须强转,会精度损失

浮点转整需要舍弃小数位

byte到double 从低到高

8、运算符

算数运算符+、关系运算符>=、逻辑运算符&、赋值运算符+=、三元运算符、

位运算符:操作二进制 & | >>

7 0111 7/2 =3 1 3/2=1 1 1/2= 1 7的二进制结果倒着余数 111

9 1001 9/2=4 1 4/2=2 0 2/2=1 0 1/2= 1 结果倒着余数 1001

0001 7&9结果1 &必须2个是1才是1

&&与 二真才真也叫短路逻辑运算符 ||或 一真则真

&&和&区别就是第一个要是假就不判断另一个,也就是短路了,直接就是假的

    int a = 10;
    int b = 20;
    int max = a < b ? b : a;  //10<20所以将b的值给max否则a,就是三元运算符

9、复合数据类型有无数种,自带方法和属性,如String、Scanner、Random等

10、Java基础运行流程,代码从上到下,从左往右,只运行一次

11、变量作用域:方法内声明的变量,方法外不可用。

12、区别

for和while都被称为前置判断循环 do..while是后置判断循环

while和do while都属于不确定次数的循环语句

for 是属于确定次数的循环语句

13、数组的创建

dataType[] arrayRefVar = new dataType[arraySize];  //动态声明
dataType[] arrayRefVar = new dataType[ ]{value0, value1, ..., valuek};//用的少,使用1、3
dataType[] arrayRefVar = {value0, value1, ..., valuek}; //静态声明方式

14、for each的使用

 for(元素类型type  元素变量value  :遍历对象obj){
                                                  引用x的java语句
                                       }
 比如一个数组 int arr[]={1,2,3,4,5};
 for(int x:arr){  //这里x只是变量名
    System.out.println(x);//如果里面还有一个循环int y :x
 }

15、二维数组的遍历

    String[] stu1 = {"张三", "Jx202211", "男", "22"};
    String[] stu2 = {"李四", "Jx202212", "女", "21"};
    String[] stu3 = {"王五", "Jx202213", "男", "25"};
    String[] stu4 = {"小六", "Jx202214", "女", "20"};
    String[][] stu = {stu1, stu2, stu3, stu4};
    for (int i = 0; i < stu.length; i++) {
        for (int j = 0; j < stu[i].length; j++) {
            System.out.print(stu[i][j]+"\t");
        }
        System.out.println();
    }

16、函数:一段具备特定功能的、高度封装的代码块

函数声明:

1、修饰符 public static  公开的 静态的
2、返回值类  void  表返回值为null
3、函数名    小驼峰命名
4、参数列表  
5、方法体  要执行的代码块

函数的调用:函数名();即可,也可以传参

17、形参与实参

比如函数声明里就是形参,而调用那里输入则是实参

18、返回值,看声明里返回值类,void则没有返回值,如int则返回整型n,如果是类,返回一个对象类

19、函数的递归即函数里调用函数自己

20、对象:世界万物皆对象,对象的特点是属性、对象的行为是方法,对象的行为必须是自发的

21、对象3大特征,封装、继承、多态

封装:私有化属性并设置公有的get、set方法,get有返回值,set没有

    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

22、修饰符的使用

//private:私有的 能且仅能在本类中使用
​
//protect:本类、子类、同一包的类可见
​
//default(无修饰):本类、同一包的类可见
​
//public:公有的 所有类 所有地方都可以访问

23、面向对象与面向过程区别

面向过程:只关注事情本身的完成,不关注谁去做,就像大象塞进冰箱,不管是谁把冰箱打开,谁把大象弄进去

面向对象:更多关注 谁去做事情 各有各的好处

24、构造函数

是一个没有返回值,并且函数名和类型相同的函数,在对象实例化的一瞬间就会执行,利用构造函数的参数,对属性进行赋值。

25、函数/方法的重载:同一类中方法名相同,参数数量和类型不同,构造函数就可以用重载

26、static方法

static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来可以。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。 static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。它的特性:只会在类加载的时候执行一次。

27、final关键词

(1)final修饰类中的属性或者变量 无论属性是基本类型还是引用类型,final所起的作用都是变量里面存放的“值”不能变,这个值,对于基本类型来说,变量里面放的就是实实在在的值,而引用类型变量里面放的是个地址,所以用final修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。

final修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对final属性可以在三个地方赋值:声明时、初始化块中、构造方法中。总之一定要赋值。

(2)final修饰类中的方法 作用:可以被继承,但继承后不能被重写。

(3)final修饰类 作用:类不可以被继承。 28、对象的生命周期

对象的出生:一旦被声明被赋值之后 对象即出现

对象的销毁:当该对象没有被指向 就会被自动销毁

String a;这是空,没有对象,所以没有出生和销毁

29、堆与栈

寄存器:最快的存储区,由编译器根据需求进行分配,我们在程序中无法控制

栈:存放基本类型的变量数据和对象打的引用,对象本身不存放在栈中,而存放在堆(new 出来的对象)或者常量池中(字符串常量存放在常量池中)

堆:存放所有new出来的对象

普通数据类型里的变量名放在栈里面,数据放堆里面

静态域(属于方法区):存放静态成员(static定义的)

常量池(属于方法区):存放字符串常量和基本类型常量(public static final)

非RAM存储:硬盘等永久存储空间

30、继承与super

继承就是子类继承父类的属性和方法 苹果是水果可以继承水果类 食草动物是动物可以继承动物类 必须满足is-a关系 父类更通用 子类更具体

关键字是extends 写在类名后面

一个类只能继承1个 继承不可滥用,牵一发而动全身,父类改变一次,其他全部受到影响,即耦合性过高,现在继承通常用于我们写的类继承Java官方的类

继承关系下 父类和子类构造函数的运行

首先父的构造函数先执行 然后子的构造函数后执行 main方法里new的是子类,可以使用子类的构造函数的参数,父类想传参必须在子类里面加super再加需要传的值。因为没new父所以不能传参,必须靠子类

关键字 super :放在代码里 用来子类给父类的构造函数的参数传参 ,找爹

31、多态

多态指同一个事物能呈现出多种形态的能力 多态是继承的一种体现

例子

比如创建狮子、老虎类,它们的方法都是吃和睡,方向需要传参那种类名和参数名小写,再创建饲养员类用来测试狮子和老虎类,正常需要创建2个test方法,传入老虎类和狮子类的类名和参数名小写,再创建Main类里弄main方法,new狮子和老虎和饲养员对象,饲养员.test(这是new的狮子)再饲养员.test(new的老虎对象),结果显示老虎和狮子吃睡 !!!

多态的使用,需要再创建一个新的动物类,写入空的吃和睡的方法,啥参数都没,狮子类和老虎类去继承这个动物类。再去测试类那先将方法体注释,重新写一个方法,传入动物类的类名和参数名,直接调用动物的吃和睡方法。再去main运行结果一样。不过比前面更方便。这就是多态使用

32、重写

父类的方法,子类写的一模一样,最终执行的是子类的方法

重写规则:修饰符不能强于父类,返回值类型、方法名、参数列表必须一样

 

33、接口:没有方法体的方法的集合

新建接口 new Java class里的interface

好处1:规定好整体项目的开发的规范

好处2:规定项目骨架 方便内容填充

实现接口的要在类中 implements

实现接口的类 需要全部实现 接口中的方法

有方法体的方法 被称为 实例方法

没方法体的方法 被称为 抽象方法

一个类可以实现多个接口 ,继承不能多继承。

34、常量:声明之后 不能改变的量就是常量 名称全部大写 关键字final 最终的意思

35、

1、JDK和JRE的区别

JDK:Java Development Kit 的简称,是java开发工具包,提供了java的开发环境和运行环境

JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。

jvm(java虚拟机)+核心类库=jre jre(java运行环境)+开发工具=jdk

 

JDK 包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。

2、 == 和 equals 的区别是什么?

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

==的问题 本质是比较内存中的地址是否相同

java里面会节省内存,比如int num=10;int num1=10;都指向同一空间

System.out.println("s"=="s");  结果是true 都是一个空间

如果是输入的字符串,因为电脑不知道是否相同,所以开辟另个空间,所以==不可以

需要用字符串.equals 方法来比较字符串内容

 

你可能感兴趣的:(java,学习,开发语言)