Fork me on GitHub

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了,我不需要你给我反馈

方法重载

看类型进去函数

  1. 方法签名

    方法名 + 括号 + 参数

    不包括返回值类型,因为返回值类型不能让人区分两个事件的区别

    和形参的名字也没有关系

  2. 传参注意

    int 可以传给double

    但是double不能传给int

  3. 对象引用的赋值

    anotherCar = carFront

    其实就是产生一把钥匙,联系上了那个地址。并没有产生新的地址

局部变量和全局变量

局部变量:作用域,从声明开始到方法体结束

一个对象其实就是一个类的实例

实例变量是和方法平行的

实例变量和局部变量重名

方法中使用到的变量的寻找规律是先找局部变量,再找实例变量

实例变量的访问

this的属性其实和对象的属性是一样的

他会直接访问这个对象中的属性

方法中调用方法

在方法中调用方法有时候没有加上this是因为他在同一个类中

Java编译器会替我们补上个this

构造方法

其实就是构造子、构造器

  1. 构造方法没有返回值类型,但是可以使用return
  2. 构造方法名必须和类名一样,也必须在类里面

作用

其实有点像init函数

在自己没有构造方法的时候,系统会帮我加上去,但并不是修改源文件

  • 创建对象之后,会根据参数类型来调用方法
  • 对象后面的括号其实就是调用构建方法
  • 可以有多个构造方法
  • Java才是创建对象的,构造方法只是创建对象之后默认调用的一个方法
  • 构造方法可以调用普通方法,但是普通方法不可以调用构造方法

空参数的构造方法

空参数中设置必须用的参数

在构造方法中调用构造方法

public Car(){
    this("Java", "coffee color");
}
  • 会去找类中符合的方法
  • 在做合法性检查的时候会比较方便
  • 要放在类中的第一行

总结

  • 单个方法是处理数据的代码块

  • 方法是用来重用的

    某些处理过程是相似的,就把他抽象成一个方法

  • 方法组织起来就是一个系统

    平面几何就靠自己的五个公里建立了一个庞大的体系

    要去学会如何调用一个方法

  • 多想多谢才能最快的速度驾驭Java这门语言

习题

习题1

  1. 构造方法应该是怎么样的

    public Book(){
        语句
    }
    // 修饰符 + 类名(){}
    
  2. 如果有同一个名字的构造方法的话,会不会跳进去

    会根据参数类型来进去

  3. 怎么给属性赋值,this还是?

    this.属性 = xxx;
    

习题3

  1. 怎么创建对象

    类名 名字 = new 类名();
    
  2. 如何读入数字,初始化变量是否需要,能否在一行搞完定义

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;
	}
}

posted @ 2020-04-03 22:24  WalterJ726  阅读(190)  评论(0编辑  收藏  举报