面向对象之封装,排序算法之冒泡排序,for循环

for循环的嵌套

for循环语句作为循环体语句;

for(初始化语句;条件表达式;步长语句){
		for(初始化语句;条件表达式;步长语句){
		//循环体语句;
	}
}
do-while循环语句**格式**:
初始化语句;
	do{
		循环体语句;
		步长语句
	}while(条件表达式) ;

	**do-while循环语句和for,while循环的最大的**区别**就是:在条件不满足的情况下循环体至少执行一次.
for,while,do-while循环
开发中:**常用for循环**,其次是while循环,do-while使用很少.

跳转控制语句:
break; //结束;中断
break**应用场景:**只能switch语句或者循环语句中使用!
continue;//继续 在循环中使用
return ;//返回
return :一般很少单独使用,一般结束方法使用的

方法

方法概念: 是使用{}包起来的内容,给{}独立的代码块起一个名字,以便于复用.
定义方法的格式
情况1:有具体返回值类型的方法定义
权限修饰符 静态修饰符 返回值类型 方法名(数据类型1 变量名1,数据类型2 变量名
2,…){
//内容;
return //结果;
}
定义方法注意事项
1).方法和方法是平级关系,不能在一个方法中定义另一个方法.
2)在定义一个有返回值类型的方法的时候,知道两个明确
a)明确方法的返回值类型
b)明确参数类型以及参数个数
3)定义方法的时候,形式参数必须带上数据类型,否则报错(Java是一种强类型语言)

		情况2:没有具体返回值类型的方法定义
	定义格式:
	修饰符(public static)  返回值类型 方法名(参数类型1 变量名1,参数类型2 变量名2....){
		//直接输出,没有return关键字
	}
	java 中没有具体返回值类型用**void**代替返回值类型.

方法重载:方法名相同,参数列表不同,与返回值无关
参数列表不同:
1)要么类型不同
2)要么参数个数不同

数组

数组是一种"容器",
可以存储同一种类型的元素的一种"容器"

		注意:
			必须要保证该容器中存储的**类型**必须一致!

数组的动态初始化:
数据类型[] 数组名称 = new 数据类型[数组长度] ;
数据类型 数组名称[] = new 数据类型[数组长度] ;

冒泡排序:
规律:
两两比较,将较大的值往后放
总共比较的次数:数组长度-1次
class ArrayDemo{
public static void main(String[] args){

	//定义一个数组,静态初始化
	int[] arr = {24,60,87,57,13} ;
	bubbleSort(arr) ;
	printArray(arr) ;
	}
										
public static void bubbleSort(int[] arr){
	for(int x = 0 ; x < arr.length-1 ; x ++ ){//循环次数
		for(int y = 0 ;y < arr.length-1-x; y++){ //元素比较
			//判断:
			if(arr[y] > arr[y+1]){
				int temp = arr[y] ;
				arr[y] = arr[y+1] ;
				arr[y+1] = temp ;
								}
							}
						}
					}
					
//遍历的功能
public static void printArray(int[] arr){
	System.out.print("[");
	for(int x = 0 ; x < arr.length ; x ++){
		//判断
		if(x== arr.length-1){
			System.out.println(arr[x]+"]") ;
		}else{
			System.out.print(arr[x]+", ") ;
						}
					}
				}
			}
	**## 二维数组**
	定义格式:
数据类型[] 数组名称[] ;
数据类型[][] 数组名称 ;

动态初始化:
	格式1:
		**数据类型[][] 数组名称 = new 数据类型[m][n] ;m表示每个一维数组;n表示每一个一维数组长**度.
	举例:
		 int[][] arr = new int[3][2] ;
		 
格式2:
m指定了一维数组的个数,[ ]一维数组的长度需要动态给定
数据类型[][] 数组名称 = new 数据类型[m][] ;

举例:
	int[][] arr = new int[3][] ;
	格式3:
	数据类型 [][] 数组名称 = {{元素1,元素2,元素3..},{元素1,元素2,元素3,...},{,}};
					int[][] arr = {{1,2,3},{4,5,6},{7,8,9}} ;

面向对象

/*
需求:
手机事物
属性:品牌(brand),价格(price),颜色(color),内存(memory)
行为:打电话,玩游戏,聊天

手机类:class Phone
成员变量:brand,price,color,memory
成员方法:callPhone(String name),playGame(),chart()

*/
//手机类
class Phone{
//成员变量
String brand ; //品牌
double price ;//价格
String color ;//颜色
int memory ; //内存

//成员方法
public void callPhone(String name){
	System.out.println("给"+cc+"打电话") ;
}

public void playGame(){
	System.out.println("手机玩游戏") ;
}

public void chart(String name){
	System.out.println("可以跟"+name+"聊天") ;
}

}
//测试类
class PhoneTest{
public static void main(String[] args){
//创建一个手机类对象
Phone p = new Phone() ; //类名 对象名 = new 类名();
//没有给该p对象的成员变量赋值
System.out.println(p.brand+"—"+p.price+"—"+p.color+"—"+p.memory) ;

	//给成员变量赋值
	p.brand = "华为p40" ;
	p.price = 4999.99;
	p.color = "翡翠绿" ;
	p.memory = 64 ;
	System.out.println(p.brand+"---"+p.price+"---"+p.color+"---"+p.memory) ;
	//访问成员方法
	p.callPhone("张三");
	p.playGame() ;
	p.chart("习总") ;
	
}

}
面向对象的思想特点:
1)更符合生活中的思想行为习惯
2)让复杂的事情简单化
3)让我们成从执行者变成了一个指挥者!
面向对象设计原则:
不断创建对象,使用对象,指挥该对象做事情!

扫描二维码关注公众号,回复: 11507520 查看本文章

面向对象的三大特征:
封装,继承,多态!

#面试题

			**## 成员变量和局部变量的区别**##
			1)在类中的位置不同
局部变量:在方法定义中或者是方法声明上的变量
成员变量:在类中,方法外定义的变量

2)在内存中的位置不同
局部变量:在栈内存中存储  跟方法有关
成员变量:在堆内存中存储	 跟类的对象有关

3)生命周期不同
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失!
成员变量:随着对象的创建而存在,随着对象的创建完毕并且使用完毕,
										等待垃圾回收器回收掉掉(GC)之后才消失!(不会立即被回收)
										
4)初始时机不同:
局部变量:在方法定义中或者方法声明上的变量,必须在使用之前进行数据初始化,否则"可能尚未初始化变量"
成员变量:跟对象有关系,在堆内存中,即使这个成员变量没有赋值,系统会根据变量的类型给这个变量进行默认初始化

匿名对象

顾名思义:没有名字的对象.
匿名对象的格式
new 类名() ;

	特点:
	   1.仅仅使用一次,使用完毕,从内存中会立即被释放掉! (节省内存空间,android移动端使用居多!)
	   2.匿名对象也可以作为参数进行传递
	   
	  注意:
		在使用匿名对象的时候,建议不使用多次!

封装

private关键字的特点:
1)private可以修饰一个类中的成员变量,也可以成员方法
2)被private修饰的成员变量或者是成员方法只能在本类中方法,外界不能访问的!(保证数据的安全性)

***什么时候将变量定义为成员变量---->如果该变量能够描述某个事物属性的话,----变量就要定义成员变量!***

标准类写法:
1.成员变量私有化
2.提供无参或有参构造.
3.提供公共的访问方法.setXXX();getXXX();

构造方法中的注意事项:
1)在一个类中,我们不写无参构造方法,系统会默认的提供一个无参构造方法,

		2)如果我们提供一个有参构造方法,系统不会在提供无参了,如果使用无参构造方法创建对象,就会报错!
				**(永远建议给出无参构造方法)!**

Static关键字特点:

1.被static修饰的变量或方法,都随着类的加载而加载.
2.被static修饰的可以被多个对象公用.
3.被static修饰的,优先于对象存在.
4.被静态修饰的成员变量,可以直接被类名直接访问.但是,也可用该类对象来访问该成员.

使用static关键字 注意事项:
1.在static中,没有this关键字,
this代表当前对象的地址值,对象已经创建,而static修饰与方法有关.
2.关于访问
非静态成员方法既可以访问静态成员变量,也可以访问成员方法.
静态成员方法:只能访问静态.

面试题

Student s=new Student();做了哪些事情?
内存角度:
1.加载Student.class进内存,方法进栈.
2.在栈内存开辟空间
3.在堆内存申请空间.
4.在堆内存对数据进行数据初始化
系统默认初始化_显示初始化—setXXX(形参);
5.在堆内存申请空间完毕,产生堆内存地址.
6.将堆内存赋值给栈内存变量s
7.栈内存变量s指向堆内存地址.

猜你喜欢

转载自blog.csdn.net/YL12261022/article/details/107575331