带妹学Java第三天(至面向对象加习题一)

重点总结

1.Java中的参数传递问题

  1. 基本数据类型的值传递,不改变原值,因为调用方法后就会弹栈,局部变量随之消失
		int a = 528;
		System.out.println("改变前a的值:" + a);
		 
		change(a);
		System.out.println("改变后a的值:" + a);
	}
	
	public static void change(int a){
		a = 1688;
	}
  1. 引用数据类型的值传递,改变原值,因为即使方法弹栈,但是堆内存数组或者对象还在,可以通过地址继续访问
    /**
    * 基本数据类型:int,byte,short,long,char,double,float,boolean
    * 引用数据类型
    * 什么是引用数据类型:数组、对象
    * 变量存是的一个内存地址
    * */
int[] arr = {1,2,3,4,5};
		//arr[2] = 10;
		System.out.println("改变前的数组的值:");
		printArr(arr);
		
		change(arr);//改变数组
		
		System.out.println("改变后的数组的值");
		printArr(arr);
	}
	
	//方法里改变数组某一个元素的值
	public static void change(int[] arr){
		arr[2] = 10;
	}
	
	//打印一个数组
	public static void printArr(int [] arr){
		
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i] + ",");
		}

2.面向对象思想

/我们学习Java编程学习什么?
声明类
声明成员变量(属性)
声明成员方法 (行为)
创建对象
给属性赋值
指挥对象干事
/

3.类

  • 类的第一个字母用大写
  • 类名的第一个字母不能用数字
  • 类名的第一个字母可以用下划线,但是不推荐使用
  • 在同一个文件中,不能有2个public的class
  • 同一个包内,不能有相同的类
  • 在同一个文件中,不能有2个public的class

4.成员变量(属性)和局部变量的区别

  1. 成员变量和局部变量在类中的位置不同
    成员变量(属性):在类中方法外
    局部变量:在方法中定义
  2. 成员变量和局部变量在内存中的位置不同
    成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    局部变量:在栈内存(局部变量属于方法,方法进栈内存)
  3. 成员变量和局部变量的生命周期不同
    成员变量:随着对象的创建而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  4. 成员变量和局部变量初始化值不同成员变量:有默认初始化值
    局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
  5. 成员变量和局部变量注意事项
    局部变量名称可以和成员变量名称一样,在方法中使用的时候,
    采用的是就近原则

5.方法的形式参数是类名的时候如何调用?

  • 方法的参数是类名public static void print(Dog dog){}
    如果你看到了一个方法的形式参数是一个类类型(引用类型)
    调用方法的时候其实需要的是该类的对象。
public class Demo01 {

	public static void main(String[] args) {
	
		//1.创建对象
		Dog dog = new Dog();
		dog.name = "小黑";
		dog.age = 1;
		
		//2.调用print方法
		//print(Dog);//Dog这是一个类
		print(dog);//dog这是一个对象
		print(new Dog());
		
	}
	
	//public static void printArr(int[] arr)//打印数组
	
	public static void print(Dog dog){
		//打印狗的名字和年龄
		System.out.println(dog.name + ":" + dog.age);
	}

}

class Dog{
	String name;
	int age;
}

6.匿名对象

public class Demo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//匿名对象
		//什么是匿名对象:没有给新创建的对象存储在一个变量里
		
		GirlFriend gf = new GirlFriend();
		gf.name = "苍老师";
		gf.hometown = "日本东京";
		gf.height = 1.68;
		gf.say();
		
		//直接打印一个对象,结果是lesson16.GirlFriend@15db9742【包名.类名@地址】
		System.out.println(gf);
		
		//new GirlFriend();//匿名对象
		System.out.println(new GirlFriend());
	}
}

class GirlFriend{
	String name;
	String hometown;//家乡
	double height;//身高
	
	public void say(){
		System.out.println("我是" + name + " 来自" + hometown + " 身高" + height);;
	}
}

7.匿名对象应用场景

public class Demo02 {
	public static void main(String[] args) {
		
		/*匿名对象应用场景
		1.调用方法,仅仅只调用一次的时候。
		 那么,这种匿名调用有什么好处吗? 节省代码 
		 注意:调用多次的时候,不适合。匿名对象调用完毕就是垃圾。可以被垃圾回收器回收。
		2.匿名对象可以作为实际参数传递
*/
		Computer comp = new Computer();
		comp.brand = "小新";
		comp.runScore();
		
		new Computer().runScore();//匿名对象调用方法
		
		print(comp);
		//匿名对象可以作为实际参数传递
		print(new Computer());//传参是就是匿名对象
		
	}
	//打印电脑的品牌
	public static void print(Computer comp) {
		System.out.println(comp.brand);
	}
}
class Computer{
	String brand;//品牌
	
	//跑分
	public void runScore() {
		System.out.println(brand + "跑分是150000...");
	}
}

8.关于内存分配进一步理解

  • 局部变量放在栈区
  • 引用类型(数组、对象)放在堆区
  • 调用方法时,先将类的文件放到方法区生成.class文件

练习题

  1. 写出一个int数组的反转
//1.定义并初始化int数组
		int[] arr = {1,3,5,6,7,9,2};
		System.out.println("数组反转前:");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+",");
		}
		//2.算出交换次数
		int count = arr.length/2;
		
		for (int i = 0; i < arr.length; i++) {
			//3.left是左边的下标,right是左边的下标
			int left = i; 
			int right = arr.length-1-i;
			
			if (i<count) {//必须设置判断,不然又换回来了!
				//4.通过数组下标交换值
				int tem = arr[left];
				arr[left] = arr[right];
				arr[right] = tem;
			}
		}
		System.out.println();
		
		//5.遍历输出交换后的数组
		System.out.println("数组反转后:");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+",");
		}
  1. int[][] arr = {{11,12},{21,22},{31,32,33}};遍历第二个数组怎么写?
int[][] arr = {{11,12},{21,22},{31,32,33}};
		for (int i = 0; i < arr[1].length; i++) {
			System.out.println(arr[1][i]);
		}
  1. 用一个类描述一个事物
public class Demo48 {
	public static void main(String[] args) {
		//48题.用一个类描述一个事物(不能与课堂一样的案例)
		
		Library library = new Library();
		library.id = 101;
		library.name = "平凡的世界";
		library.address = "AJ-003";
		
		library.jieShu();
		library.huanShu();
	}
}

class Library{
	//图书馆成员属性
	int id;//图书编号
	String name;//图书名称
	String address;//存放位置
	
	//图书馆成员方法
	public void jieShu() {
		System.out.println("你借到了" + name + ",编号为" + id + ",位置在" + address);
	}
	
	public void huanShu() {
		System.out.println("你还了" + name+",欢迎下次再来");
	}
	
	
}
  1. A水池有154吨水,B水池有82吨水,两水池每小时都排出2吨水,多少个小时后,A水池的吨数是B水池的4倍。
int a = 154;
		int b = 82;
		int x = 0;
		boolean flag = true;
		while(flag){
			int c = (int)(154-2*x)/(82-2*x);
			if(c==4){
				System.out.println(x+"小时后,A水池的吨数是B水池的4倍");
				flag = false;
			}
			x++;
  1. 有一个小于500的三位数abc,对于这个三位数,甲乙丙丁有如下说法:
    甲:这个三位数能被2整除3次
    乙:这个三位数能被3整除2次
    丙:这个三位数能被7整除
    丁:这三个数的各个数字之和是15
    一直甲乙丙丁有一个人说了谎,请问2a+b-c=多少?(有难度)
int i = 100;
		while (i<500) {
			//i的百位
			int a = i/100;
			//i的十位
			int b = i%100/10;
			//i的个位
			int c = i%10;
			
			//甲:这个三位数能被2整除3次
			int jia = i%8;
			//乙:这个三位数能被3整除2次
			int yi = i%9;
			//丙:这个三位数能被7整除
			int bing = i%7;
			//丁:这三个数的各个数字之和是15
			int ding = a+b+c;
			
			//判断,四种情况
			if (yi==0&&bing==0&&ding==15) {//甲说慌
				System.out.println("甲说慌");
			}else if(jia==0&&bing==0&&ding==15){//乙说谎
				System.out.println("乙说谎");
				System.out.println("这个数是:"+i);
				System.out.println("2a+b-c="+(2*a+b-c));
				
			}else if(jia==0&&yi==0&&ding==15){//丙说谎
				System.out.println("丙说谎");
			}else if(jia==0&&yi==0&&bing==0){//丁说谎
				System.out.println("丁说谎");
			}
			i++;
		}

面试题

  1. Java中到底是传值还是传地址讲解
  • 见重点总结1

易错点

  1. 短路&&
int x=4;
		int y=6;
		System.out.println(--x>3 && y++>5);//短路&&
		System.out.println("x:"+x);
		System.out.println("y:"+y);
  1. switch和++
public static void main(String[] args) {
		int x=3;
		switch (x) {
		case 3:
			x++;
		case 4:
			x++;
		default:
			x++;
		}
		System.out.println("x:"+x);
	}

附件

  • 数组内存解释

    数组内存解释

发布了24 篇原创文章 · 获赞 4 · 访问量 623

猜你喜欢

转载自blog.csdn.net/qq_43488797/article/details/103690705