java学习日志.docx
- 文档编号:11086650
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:74
- 大小:114.44KB
java学习日志.docx
《java学习日志.docx》由会员分享,可在线阅读,更多相关《java学习日志.docx(74页珍藏版)》请在冰点文库上搜索。
java学习日志
编码:
GBKGB2312中文编码UTF-8Unicode国际标准编码
B/s:
浏览器/服务器c/s:
客户端/服务器SVN:
公司的一台服务器,将编好并测试好的代码上传以便分享
Doc命令
dir:
列出当前目录下的文件和文件夹
md:
创建目录
rd:
删除目录
cd:
进入指定目录
cd..:
退回到上一级目录
cd/:
退回到根目录
del:
删除文件
exit:
退出dos命令
查看环境变量:
setpath
Start:
新开doc窗口
java语言具有跨平台性:
不同的系统有不同的虚拟机
Java类库组织结构
JDK:
java开发工具包包括JRE+开发工具。
给java程序开发人员使用
JRE:
(javaRuntimeRnvironment)
Java运行环境包括java虚拟机、java程序核心类库。
给java程序的运行者使用
可执行工具:
javac.exe用来把java的源代码编译成class文件
java.exe运行class文件
javadoc.exe生成帮助文档打包文件
java虚拟机(JVM):
在不同的操作系统环境下虚拟出一个与平台无关的java运行环境,使java文件可以跨平台使用
java类库:
先人写好的公用代码API帮助文档
垃圾回收器(GC):
java开发人员只需要申请内存,不需要回收垃圾。
在java程序运行期间,不再使用的内存由GC自动回收释放。
配置环境变量:
配置path为C:
\ProgramFiles(x86)\Java\jdk1.6.0_11\bin;
配置环境变量技巧:
新建系统变量:
JAVA_HOMEC:
\ProgramFiles(x86)\Java\jdk1.6.0_11
配置path为:
%JAVA_HOME%\bin
当jdk目录改变时,改变JAVA_HOME中的目录即可。
关键字必须小写
注释:
//单行注释
/**/多行注释
Java特有注释/***/文档注释
Javadoc可以提取文档注释中的所有内容,生成说明书,供程序员自己看
单行注释和多行注释可以相互嵌套,
单行注释中可以嵌套单行注释
多行注释中不可以嵌套多行注释
小技巧:
用注释调试程序
若觉得某处有错误,可以用注释将其划掉,然后编译,再逐步缩小注释范围编译
注释不编译
编代码一定要写注释
编写代码规范:
例:
/*
需求:
练习一个helloworld程序
思路:
1.定义一个类,因为java程序都是以类的形式存在的,类的形式其实就是一个字节码文件
2.定义一个主函数,为了让该类可以独立运行
3.在控制台上输出helloworld语句
步骤:
1.用class关键字来完成类的定义。
2.主函数java虚拟机认识
3.使用输出语句输出
*/
ClassDemo{
//定义一个主函数,为保证程序的独立运行
Publiacstaticvoidmain(String[]args){
System.out.println(“helloworld”);//这是输出语句,用于将括号中的数据打印在控制台上,ln可以在数据的结尾处换行
}
}
变量的声明和赋值:
变量类型变量名;//声明变量
变量名=值;//对变量进行赋值
变量类型变量名=值;//声明变量的同时对它赋值
数据类型:
基本数据类型:
1.整数型:
(默认为int型)
byte字节型:
占1字节(8位)有2的8次方种排列表示范围:
-128-127
short短整型:
占2字节(16位)-2的15次到2的15次-1
int整型:
占4字节(32位)
long长整型:
占8个字节(64位)
2.char字符型:
占2字节存放单个字符例:
charc='a';或charc='中';
3.浮点型:
(默认为double型)
float单精度浮点型:
占4字节存放数据范围比long大。
double双精度浮点型占8字节floatf=1234.5667f;(精确程度更高)
4.boolean布尔类型
引用数据类型:
类接口数组
字符串:
"a""sbbu223"Stringstr="这是字符串的值";
导入java文件:
fileimportGeneralExistingProjectsintoworkspace
数据类型之间的转换:
自动转换:
小范围到大范围
inta=10;
longlo=a;
强制转换:
大范围到小范围会出现数据溢出问题
longm=1223334;
ints=(int)m;
‘a’97
‘b’98‘A’65
‘1’49
字符串和任何数据使用+,+都是连接符,最终都会变成字符串。
标识符
1.只能由字母、数字、下划线、$符组成;
2.必须以字母、下划线、$开头;
3.不能是关键字;
4.严格区分大小写。
注:
下划线和$符用来连接两个名称
关键字
在java语言中已经被系统占用,有专门用途的字符串。
目前有48个,全部为小写。
运算符
%取余符号与被除数相同
转义字符:
通过\来转变后面字母或符号的含义
\n:
换行
\b:
退格。
相当于backspace键
\r:
按下回车键。
Windows系统,回车符是由\r\n表示的。
\t:
制表符,相当于tab键。
面试点
Shorts=4;
S=s+5;//会报错进行了两次运算因为s会被提升为int类型,运算后结果为int类型。
无法赋值给short类型。
需要进行强转。
S+=5;//不会报错进行了一次运算它在赋值时自动完成了强转操作。
^:
异或:
和或有点不一样。
^:
运算特点。
true^true=false;
true^false=true;
false^true=true;
false^false=false;
^异或的运算规律:
^符号的两边结果如果相同,结果是false。
两边的结果不同,结果是true。
面试题:
&&:
和&运算的结果是一样的。
但是运算过程有点小区别。
&:
无论左边的运算结果是什么,右边都参与运算。
&&:
当左边为false时,右边不参与运算的。
||:
和|运算的结果是一样的。
但是运算过程有点小区别。
|:
无论左边的运算结果是什么,右边都参与运算。
||:
当左边为true时,右边不参与运算的。
三目运算符:
获取两个数中的较大数
Inta;
Intb;
Intmax=a>b?
a:
b;
获取三个数中的较大数
Into,p,q;
Inttemp=o>p?
o:
p;
Intmax=q>temp?
q:
temp;
//最有效率的方式算出2乘以8等于几?
//System.out.println(2<<3);
对两个数互换:
开发时,使用第三方变量的形式
Inta,b;
Inttemp=a;
a=b;
b=temp;
/*
面试的时候用。
a=a^b;//a=3^5;
b=a^b;//b=(3^5)^5;b=3;
a=a^b;//a=(3^5)^3;a=5;
*/
System.out.println("a="+a+",b="+b);
*/
^是什么意思?
^表示异或相同时为假,不同时为真。
用十六进制
运算公式:
A^b^b=A
移位符:
m< M>>n结果为m/2的n次幂 算术运算符: +-*/(两个整数相除结果仍为整数) ++后缀: inti=a++;即i=a;a=a+1; 前缀: inti=++a;即a=a+1;i=a; 面试点: Chara=’a’; Charb=13; Charc=a+b;//报错a提升为int类型 Chard=’a’+13;//int自动转换为char。 通过键盘输入: Scannert=newScanner(System.in); Intm=t.nextInt(); 循环语句 Switch语句: 计算出表达式的值,与每个case后的值比较,若相等,就执行相应的代码段,否则执行defult后的代码段。 Switch(表达式或值(只接收byteshortintchar){ case值1: 代码段1; break; case值2: 代码段2; break; case值3: 代码段3; break; default: 代码段4: break; } Switch和if语句的应用场景: 判断的具体数值不多,符合byteshortintchar类型时用switch语句,效率高。 判断区间,结果为boolean类型的语句的判断等用if语句 If语句的使用更广泛。 if和switch的应用: if: 1,对具体的值进行判断。 2,对区间判断。 3,对运算结果是boolean类型的表达式进行判断。 switch: 1,对具体的值进行判断。 2,值的个数通常是固定的。 对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存。 效率相对高一点。 Switchcase语句结束1,全部的case都执行完。 2.遇到break Dowhile和while的区别: Dowhile无论条件是否满足,循环体至少执行一次。 While先判断条件,后执行。 Dowhile先执行,后判断。 语句由;结束,所以dowhile中while的后边要加;号。 For循环 For(初始化表达式(只执行一次);布尔表达式;循环后的操作表达式){ 循环体 } While循环和for循环的区别: (for和while完全可以互换) 若果循环语句的初始变量,只用来控制循环次数,则用for循环。 如果初始化变量想在后续的操作中使用则用while循环。 For循环中的初始变量作用域是for循环内部,循环执行开始,开辟内存,循环结束,立即销毁。 而while循环的初值还在内存中。 即变量有自己的作用域 无限循环的最简单表现形式: for(;;){} while(true){} 写循环语句时,要明确那些语句参与循环,那些不需要 System.out.println()换行 嵌套循环: 打印图形,外圈控制行数,内圈控制每一行元素的个数。 。 Break和continue Break: 中断整个循环 Continue: 中断本个循环的本次执行,继续下一次循环 Continue和break语句单独存在时。 其后都不能再写任何语句。 面向对象 面向对象是一种思想,将功能封装进对象中,强调对象。 面向对象的三个特征: 封装、继承、多态。 以后开发: 找对象使用。 没有对象,就创建一个对象。 找对象,建对象,使用对象,维护对象之间的关系。 类和对象的关系: 类: 对现实生活中事物的抽象描述。 对象: 该类事物实际存在的个体。 类中包含: 成员变量、成员方法。 成员变量的调用: 对象.对象成员 成员变量: 堆内存中。 作用于整个类中 局部变量(localvariable): 栈内存中。 作用于方法或语句块中。 必须进行初始化。 匿名对象: 调用成员变量没有意义。 使用方式一: 当对象的方法只调用一次时,可以用匿名对象。 使用方式二: 可以将匿名对象作为实际参数进行传值。 newcar().get(); get(newcar()); compile: 编译 封装 定义: 隐藏对象的属性和实现细节,仅对外提供公共访问方式。 特点: 提高安全性; 提高复用性 通过权限修饰符将类的成员变量封装起来。 私有不是封装,仅仅是封装的一种体现 将age私有化后,类外的对象不能访问。 此时就需要在person类中提供age对应的访问方式。 即get和set方法。 对外提供访问方式,是因为可以在访问方式中加入判断语句,对访问的数据进行操作,提高代码的健壮性。 继承 如何使用继承体系中的功能: 先看父类体系的描述,因为父类中定义的是该体系的共性功能。 通过了解共性功能就知道该体系的基本功能。 在具体使用时要创建子类的对象。 1.可能父类不能创建对象 2.创建子类对象可以使用更多的功能,包括父类基本的功能和子类特有的功能。 总结: 查阅父类功能,创建子类对象使用功能。 若果子类中出现非私有的同名变量时,子类要访问本类中的同名变量时用this; 子类要访问父类中的同名变量时用super 通过继承,子类自动拥有父类所有的成员变量和成员方法 子类的引用可以访问继承的父类成员,父类的引用不能访问子类的独有成员 子类不能继承父类中用private修饰的成员 子类和父类不在同一个包时,不能继承父类中用private和默认的成员 子类实例化 1.子类所有构造方法默认访问父类无参构造方法。 而且这个过程是必须的。 父类会在其构造方法中对自己的属性进行赋值。 子类必须要继承这些变化。 2.子类构造方法中默认第一句是super();它用来调用父类中的无参构造方法。 若是父类中没有无参构造方法,则会报错,子类必须手动通过super()语句来指定要访问父类中的哪个构造函数。 3.若父类中没有定义无参构造方法,子类的构造方法就要用super表明要调用那个构造方法。 4.Super要写在构造函数的第一行,因为要先完成父类动作的初始化 5.Super和this都只能写在构造函数的第一行,所以他们不可能同时出现, This存在时super不存在。 this调用本类的构造函数,但可以保证子类中肯定还有其它构造方法访问父类构造方法 &&&子类中至少有一个构造方法会访问子类的构造方法。 子类的构造方法 。 。 子类不能重写父类的构造方法,子类创建对象时, 先加载父类构造方法,在加载子类构造方法。 子类所有的构造方法第一行默认是super();语句。 如果父类中没有无参构造方法,子类构造方法需要手动的用super语句调用父类构造方法。 Object根类 Java代码执行顺序 创建对象时,先对成员变量进行默认初始化,然后再调用构造方法对父类变量初始化,然后子类自己的成员变量才能显示初始化 父类初始化完毕才能让子类自己的变量显现出来 方法 方法的定义: 修饰符返回值类型函数名(参数类型形参,参数类型形参){ 执行语句; Return返回值; } 方法的特点: 1.定义方法可以将功能代码封装; 2.方法只有在调用时才会被执行, 3.提高了代码的复用性; 4.方法中只能调用方法,不能在方法内部定义方法。 5.无返回值时用void表示 定义方法需注意: 1.明确功能结果,即返回值 2.参数 构造方法: 在创建对象时调用 1.方法名和类名相同 2.无返回值 作用: 给成员变量赋值,对象的初始化 一个类中如果定义了构造方法,则默认的构造方法就没有了,否则一定存在一个默认的空参数构造方法。 构造方法和一般成员方法的区别: 1.创建对象时构造方法就已经被调用,对对象进行初始化。 而成员方法是在创建对象后需要该功能时专门调用 2.构造方法在创建对象时(一个对象),只被调用一次,成员方法在创建对象后可以调用多次 若是类中有了有参构造方法,系统不再自动生成无参构造方法。 则创建对象时需要传参,否则报错。 要想不传参,则需要再定义一个无参构造方法。 何时调用构造函数: 当某事物具备特性或者行为时 一个类中默认会有一个空参数构造方法,它的权限和所属类一致。 如果类被public修饰,则默认无参构造方法也被public修饰。 若类没有被public修饰,则默认的构造方法也没有被public修饰。 默认构造方法的权限是随着类的变化而变化的。 构造代码块: 格式: {} 作用: 给对象进行初始化。 其中定义不同对象都具有的共性 创建对象时调用,优先于构造方法。 构造代码块和构造方法的区别: 构造代码块: 给所有对象统一进行初始化。 构造函数: 只给对应的对象初始化。 创建对象内存分析 1.主函数先执行,加载类文件 栈中: mainp 2.执行类代码块,给类进行初始化 3.在堆内存中开辟空间创建对象分配内存地址 4.在堆内存中建立对象的特有属性,成员变量先默认初始化,初始化为该类型的0值。 5.成员变量显式初始化, 6.构造代码块初始化 7.调用构造方法初始化 8.将对象的内存地址赋值给栈内存中的引用变量p 方法放在方法区,调用方法是,方法暂时进入栈内存中,方法执行完后消失 方法的重写: 1.必须有继承 2.重写方法和被重写方法方法名相同,参数个数。 类型、顺序相同 3.返回类型协变或相同 注: private修饰的方法不能被重写; 子类方法不能缩小父类方法的访问权限; 子类不能抛出比父类更多的异常; 非静态方法不能被静态方法重写; 静态方法不能被重写,但是静态变量和方法都可以被屏蔽。 方法的重载: 在同一个类中,方法的类名相同,参数,类型,个数,顺序至少有一个不同。 自己的想法: 在一个类中,成员变量先不赋值,系统分派内存先进行默认初始化。 然后通过构造方法对成员变量赋值。 创建对象时根据参数的类型,个数,顺序判断要调用哪个构造方法。 重载方法的调用: 根据参数的个数,类型、顺序不同来区分调用的是哪个方法。 方法的实参与形参类型相同或兼容、个数相同、顺序一致。 重写和重载的区别: 相同点: 方法名相同 不同点: 1.条件: 重写: 必须有继承,在子类中重写 重载: 在同一个类中 2.参数: 重写: 参数个数、类型、顺序相同 重载: 参数个数。 类型、顺序至少有一个不同 3.返回类型: 重写: 返回类型必须一致或协变 重载: 对返回类型无要求 4.次数: 父类的一个方法只能被一个子类重写一次 一个类中可以有一个方法的多个重载方法 5.权限和异常 重写: 对方法的访问权限不能缩小,对方法抛出的异常不能扩大 重载: 没有限制 局部变量和成员变量同名时。 屏蔽类中的成员变量。 子类中的成员变量和父类中的成员变量同名时,在子类范围内屏蔽父类的成员变量。 子类重写父类的方法后,子类范围内,屏蔽父类的成员方法。 子类某静态方法和父类方法同名时,子类范围内,屏蔽父类的方法。 This关键字: This表示当前对象。 用在构造方法和成员方法中,只能放在第一行。 用于解决变量的命名冲突和不确定性问题。 1.当局部变量和成员变量同名时,局部变量屏蔽成员变量。 用this调用成员变量。 2.在构造方法中调用该类中的另一个构造方法,并传递要调用的构造方法所需的参数。 (java中,多个构造方法可能存在共同的代码) 例: this();this(1,‘L’,48); 3.在一个成员方法内,访问当前实例的引用(作为方法的实参) Print(this);不太明白 This的应用: 当定义类中功能时,该方法的内部用到调用该方法的对象,就用this来表示这个对象。 但凡功能内用到了本类对象,都用this表示。 Super关键字放在第一行的原因: 任何一个类在实例化时,必须先实例化父类 关于this关键字为何只能放在第一行? 自己的想法: 在构造方法中调用其它构造方法,本类中所有的构造方法中必须有一个会访问父类构造方法,然后又返回到了super上。 以下是老师解答: 假设说你在构造方法里面第一行没有写this()而是在第二行写的this() 那么第一行是不是自动的回去调用super? 然后第二行又去调用this(),那么调用的构造方法是不是还得再去调用super? 你必须在构造器的第一行放置super或者this构造方法,否则编译器会自动地放一个无参的super构造器的,其他的构造方法也可以调用super或者this,调用成一个递归的结构,最后的结果是父类的构造方法(可能有多级父类构造方法)始终在子类的构造器之前执行,递归的调用父类构造方法。 无法执行当前的类的构造器。 也就不能实例化任何对象,这个类就没作用了 static Static: 关键字修饰成员变量和成员方法。 Static特点: 1.随着类的加载而加载,随着类的消失而消失,它的生命周期最长。 Stringname;成员变量实例变量随着对象的创建而存在,随着对象的消失而消失。 Staticcountry=“china”静态的成员变量类变量 2.静态变量优先于对象存在。 3.被satic修饰的内容不在堆内存中,类中所有对象共享。 4.可以直接用类名来调用。 成员变量和静态变量的区别: 1.存放位置: 类变量随着类的加载存在于方法区中 实例变量随着对象的建立而存在于堆内存中。 2.生命周期: 类变量生命周期最长,类的产生到消失 实例变量生命周期其次,对象的产生到消失。 Static使用注意事项: 1.静态方法只能访问静态成员(静态成员变量和静态成员方法) 非静态方法既可以访问静态也可以访问非静态(后来的可以访问先来的) 2.静态方法中不可以定义this,super关键字。 因为静态优先存在,所以静态方法中不可以出现this,super等代表对象的关键字。 3.主函数是静态的。 Static的优缺点: 优点: 对对象的共享数据进行单独存储,节约空间。 没必要每个对象中都存储一份。 可以直接被类名调用 缺点: 生命周期过长,访问出现局限性。 (静态虽好,只能访问静态) Static使用的场景: 1.静态变量: 当对象中出现共享数据时,用static修饰。 对象中的特有数据定义成非静态。 2.静态方法: 当功能内部没有访问非静态数据(对象的特有数据),用static修饰 静态代码块: Static{ } 特点: 随着类的加载而执行,只执行一次,并优先于主函数。 用于给类进行初始化。 用到了类中的内容时才会加载。 若定义过多的静态变量则太消耗内存。 对象消失后静态变量还在。 用static修饰的变量、常量、方法是定义在类中。 即这些成员是类相关的。 只属于某个类,被这个类的对象所共享。 (可以直接通过类名来调用,也可用对象来调用)而前面介绍的成员变量和成员方法是实例相关的。 (其使用必须要通过声明实例来完成) 静态变量只在类加载时初始化一次,初始化为该类型的零值;静态常量必须在定义时初始化,且只在类加载时初始化一次。 静态变量、静态常量不能定义在方法中。 静态方法中不能引用非静态成员变量、成员方法,(非静态可以调用静态的) 调用: 对象名.变量名对象名.方法名 类名.变量名类名.方法名 主函数 主函数的主要作用就是调用。 主函数: 是一个特殊的函数。 作为程序的入口,可以被jvm调用。 主函数的定义: Public: 代表该函数的访问权限是最大的; Static: 代表主函数随着类的加载已经存在了; Void: 主函数没有具体的返回值; Main: 不是关键字,但很特殊,可以被jvm识别; (String【】args): 主函数的参数,参数是一个字符串类型的数组。 主函数是固定格式的,虚拟机识别。 Jvm在调用主函数时,传入的是长度为0的字符串类型数组,数组内没有元素。 Su
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 学习 日志