拿出来大家共勉,不足之处请指正。
很久之前的学习笔记了,一直存放在本地中
文章目录
- Java的数据类型:
- import 语句
- main方法
- 基本数据类型
- 类代码块执行顺序
- 逻辑运算符
- Java StringBuffer 和 StringBuilder
- 字节码
- For循环的数据使用顺序
- 静态方法调用的三种方式:
- Arrays
- 路径地址问题
- this.getClass().getName()
- unicode大小比较
- 空语句
使用编译器javac.exe编译源文件*.java
使用解释器java.exe来执行字节码文件*.class
使用反编译器javap.exe来使字节码.class转为源码.java
Java的数据类型:
基本数据类型、引用数据类型
import 语句
引入整个包中的类,只影响编译速度,不影响运行速度。
eg:
import java.*;
import java.lang.String; 速度的问题,电脑上差别不大,在手持设备上会有区别
main方法
1、不一定要有main是对的,但一个项目中只有一个main是错的,一个项目可以有好好多个类,每个类里面都可以有1个main方法
2、web应用中可以不要main是对的,因为IE默认有main方法是错的,不是ie,应该说web 容器已经自带了入口.
3、控制台应用中,必须要有main方法,该方法将作为程序运行的入口.
异或 相同=0 不同=1
或 一个为1 就是1(真)
基本数据类型
1Byte=8bit (1B=8bit)
1KB=1024Byte(字节)=8*1024bit
1MB=1024KB
1GB=1024MB
1TB=1024GB
类代码块执行顺序
被JVM装载->执行父类的相关代码->如果有静态初始化,先执行静态初始化,且只执行一次,以后即使有该类实例化,也不会再执行->如果有静态代码块,以与静态初始化一样的方式执行->如果有new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式执行super(),即父类的构造方法,->执行非静态代码块(main也在)-〉执行本类的构造函数-〉执行其他代码
逻辑运算符
&(按位与)
1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
&&(逻辑与)
先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。
|(按位或)
1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
||(逻辑或)
规则是一个为真即为真,后续不再计算,一个为假再计算右边的表达式。
^(异或运算符)
1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
(异就是不同的意思,两个位置上内容不同就是真“1”,内容相同就是假为“0”)
<<(左移运算符)
5<<2的意思为5的二进制位往左挪两位,右边补0,5的二进制位是0000 0101 , 就是把有效值101往左挪两位就是0001 0100 ,正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是20
>>(右移运算符)
凡位运算符都是把值先转换成二进制再进行后续的处理,5的二进制位是0000 0101,右移两位就是把101左移后为0000 0001,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1
~(取反运算符)
取反就是1为0,0为1,5的二进制位是0000 0101,取反后为1111 1010,值为-6
>>>(无符号右移运算符)
无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。15的二进制位是0000 1111 , 右移2位0000 0011,结果为3
负数无符号右移
Java StringBuffer 和 StringBuilder
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
字节码
jvm不仅仅可以运行java语言,只要满足java虚拟机规范,任何可以编译成class文件的语言都可以在jvm上运行,例如scala,JRuby等,因此字节码命令所提供的语义描述能力肯定比java语言本身更强大。
每个class文件对应着唯一一个类或者接口的定义信息,但是类和接口不一定都存在于class类文件中,类加载器可以利用反射代理构造一个类或者接口; 类文件中的二进制都是以8个二进制位为一个基本单位进行分割,因此,class文件中8的倍数的字节才是有意义的,超过8个字节的数据项是按高位在前,低位在后的方式存放的; 类中的数据结构主要有两种:无符号数(u1,u2,u4,u8)和表(_info)。
For循环的数据使用顺序
for循环的执行顺序如下:
for(sta1;sta2;sta3)
{ sta4;}
1.进入循环执行sta1;//只是进入的时候执行.
2.执行sta2;//条件为真才执行sta4,不然就跳出for了.
3,执行sta4;
4,执行sta3;
5,再回到第2步开始执行
静态方法调用的三种方式:
1、new xx().静态(); //使用对象调用,不推荐
2、xx.静态(); //类名调用,正规调用方法,推荐
3、静态(); //本类的静态方法在本类调用,直接调用
注意事项:
在同包不同类调用的时候,可以直接 类名.方法() 调用,无需创建对象。
在不同包调用的时候,需要引包再调用。
Arrays
Arrays…sort()用法
Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用。
1、Arrays.sort(int[] a)
这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。
1 import java.util.Arrays;
2
3 public class Main {
4 public static void main(String[] args) {
5
6 int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
7 Arrays.sort(a);
8 for(int i = 0; i < a.length; i ++) {
9 System.out.print(a[i] + " ");
10 }
11 }
12
13 }
Arrays.binarySearch用法
一种查找元素的方法。它使用的前提是数组是有序的(即要先用sort来进行排序)。
路径地址问题
已 知 JDK 的 安 装 目 录 为 D:\jdk1.8 ,
则 环 境 变 量 中 classpath 的 值 是 .;D:\jdk1.8\lib path的值是2. .;D:\jdk1.8\bin
this.getClass().getName()
this.getClass().getName()//返回的当前运行的类名
this.getClass().getSuperClass().getName() //返回的是父类名
this.getClass().newInstance(); //用缺省构造函数创建一个该类的对象this.getClass().getInterfaces(); //获得此类实现的接口信息
this.getClass().getMethods();//获得此类实现的所有公有方法
Class.forName(" … JDBC driver class name…"); // Class类的静态方法forName, 向DiverManager注册这个JDBC driver类
unicode大小比较
a——97 A——65 1——49
汉字是比字母大的 汉字排到几千
空语句
一个分号也是一条语句,称做空语句