Java学习1-7章
Java123的1-7章
.class文件其实是字节码
然后交由jvm来编译
Java基础
JavaSE --- Java platform standard edition 平台标准版
JavaEE --- enterprise edition 平台企业版
JavaME --- micro edition 平台微型版
Java 语言的优点
跨平台性
抛弃了操作符重载,多继承,自动的强制类型转换
提供类、接口、和继承。只支持类之间的单继承,但支持接口之间的多继承并支持类与接口的实现机制
不支持指针,只能通过对象的实例来访问内存
Oracle Berkeley 数据库
工作原理
JVM,执行.class文件
JVM解释器:处理字段码的CPU
JVM指令系统:说明一条指令的功能。由操作码和操作数组成。
寄存器:与解释器进行数据交换
JVM栈:指令执行时,数据和信息存储的场所和控制中心
存储区:存储编译过的字节码
碎片回收区:使用过的具体实例从内存中进行回收,可以避免编程控制内存的麻烦和危险
无用内存自动回收机制
把不再使用的内存释放掉,但在Java的运行环境中,始终存在着一个系统级的线程,来跟踪内存的使用情况
JDK包括JRE和开发工具
java不直接使用指针
有丰富的库给我们调用
类型转换:能从低到高,但是不能从高到低
在执行加法等运算的时候,先把低的转换成高的之后,然后再运算
程序执行流程
do - while至少执行一遍
执行完一遍之后再加一然后再判断
int number;
switch(number)
{
case 1:
default:
}
// 不用括号,通过break结束
程序输入
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HelloWorld {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一个数字,然后敲enter键");
int valueFromConsole = Integer.parseInt(reader.readLine());
System.out.println("输入的值为:" + valueFromConsole + '\n');
}
}
数组使用
无法从在数组类型上强制类型转换
但是元素的进入还是遵循正常的规则的
初始值是0,nul字符,false,0.0
int[] students; // 只是创建了数组
students = new int[5]; // 真正调用了资源,生成了一个对象
students[0] = 11;
students[1] = 12;
students[2] = 13;
students[3] = 14;
students[4] = 15;
System.out.println("输入的值为:" + students[0] + '\n');
// int[] students = new int[5];
// int[] studetns = { 55, 66, 77, 88, 99 }
int[] studentsSame;
studentsSame = students; // 使用同一个内存,也会同时改变
内存使用
public class MultiDimArrayUsage {
public static void main(String[] args) {
int[][] gradeStudents = new int[2][5];
// (1) 创建一个二维数组来存储一个年级学生的成绩
int[] classOne; // (2)创建一个数组变量classOne
classOne = gradeStudents[0]; // (3)让classOne指向一班
classOne[0] = 88; // (4)1班第1个学生的成绩为88
//(5)使用gradeStudents输出1班第1个学生的成绩
System.out.println("第1班第1个学生的成绩是:"+ gradeStudents[0][0]);
int[] classTwo = new int[6]; // (6)二班其实有6个学生
classTwo[5] = 99; // (7)2班第6个学生的成绩是99
gradeStudents[1] = classTwo; // (8)使用classTwo给gradeStudents
// 中代表2班成绩的数
// 组变量赋值
// (9) 使用gradeStudents输出第2班第6个学生的成绩
System.out.println("第2班第6个学生的成绩是:"+ gradeStudents[1][5]);
}
}
// 指向的是gradeStudents[0]指向的地方,而不是gradeStudents[0]本身
JAVA中的方法
类和对象
指针是不存在的,只对类来说存在
03 == 3
String direction = (new Car()).direction;
总结:
-
类是一种抽象的定义,是一类东西
-
对象是一个具体的实例
-
new 一个类其实就是产生一个地址
-
Class + 类名 其实是产生一把钥匙
-
引用之后的属性值为null,表示他不指向对象
如果引用本身的值为null,则访问不了对象
方法
访问控制符
为了限制驾驶员的权。比如排尾气,他不需要动,也不应该动这个部分
返回值类型和关键字
void的意思就是,你做完这个事情就ok了,我不需要你给我反馈
方法重载
看类型进去函数
-
方法签名
方法名 + 括号 + 参数
不包括返回值类型,因为返回值类型不能让人区分两个事件的区别
和形参的名字也没有关系
-
传参注意
int 可以传给double
但是double不能传给int
-
对象引用的赋值
anotherCar = carFront
其实就是产生一把钥匙,联系上了那个地址。并没有产生新的地址
局部变量和全局变量
局部变量:作用域,从声明开始到方法体结束
一个对象其实就是一个类的实例
实例变量是和方法平行的
实例变量和局部变量重名
方法中使用到的变量的寻找规律是先找局部变量,再找实例变量
实例变量的访问
this的属性其实和对象的属性是一样的
他会直接访问这个对象中的属性
方法中调用方法
在方法中调用方法有时候没有加上this是因为他在同一个类中
Java编译器会替我们补上个this
构造方法
其实就是构造子、构造器
- 构造方法没有返回值类型,但是可以使用return
- 构造方法名必须和类名一样,也必须在类里面
作用
其实有点像init函数
在自己没有构造方法的时候,系统会帮我加上去,但并不是修改源文件
- 创建对象之后,会根据参数类型来调用方法
- 对象后面的括号其实就是调用构建方法
- 可以有多个构造方法
- Java才是创建对象的,构造方法只是创建对象之后默认调用的一个方法
- 构造方法可以调用普通方法,但是普通方法不可以调用构造方法
空参数的构造方法
空参数中设置必须用的参数
在构造方法中调用构造方法
public Car(){
this("Java", "coffee color");
}
- 会去找类中符合的方法
- 在做合法性检查的时候会比较方便
- 要放在类中的第一行
总结
-
单个方法是处理数据的代码块
-
方法是用来重用的
某些处理过程是相似的,就把他抽象成一个方法
-
方法组织起来就是一个系统
平面几何就靠自己的五个公里建立了一个庞大的体系
要去学会如何调用一个方法
-
多想多谢才能最快的速度驾驭Java这门语言
习题
习题1
-
构造方法应该是怎么样的
public Book(){ 语句 } // 修饰符 + 类名(){}
-
如果有同一个名字的构造方法的话,会不会跳进去
会根据参数类型来进去
-
怎么给属性赋值,this还是?
this.属性 = xxx;
习题3
-
怎么创建对象
类名 名字 = new 类名();
-
如何读入数字,初始化变量是否需要,能否在一行搞完定义
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HelloWorld {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
Book Book1 = new Book();
System.out.println("书名是:" + Book1.getBookName());
System.out.println("页数是:" + Book1.getPageCount());
System.out.println("价格是:" + Book1.getPrice());
String name = "Benz";
int page = 120;
double price = 12;
Book1.setBookName(name);
Book1.setPageCount(page);
Book1.setPrice(price);
System.out.println("书名是:" + Book1.getBookName());
System.out.println("页数是:" + Book1.getPageCount());
System.out.println("价格是:" + Book1.getPrice());
}
}
//
public class Book {
String bookName;
int pageCount;
double price;
public Book() {
this("Harry potter", 100, 10);
}
public Book(String name, int page, double price) {
this.setBookName(name);
this.setPageCount(page);
this.setPrice(price);
}
String getBookName() {
return this.bookName;
}
void setBookName(String name) {
this.bookName = name;
}
int getPageCount() {
return this.pageCount;
}
void setPageCount(int page) {
this.pageCount = page;
}
double getPrice() {
return this.price;
}
void setPrice(double price) {
this.price = price;
}
}