疯狂Java——day02

流程控制

  • 顺序结构
  • 分支结构
  • 循环结构

break

终止结束循环

for (int i = 0; i < 20 ;i ++ )
{
	if (i == 3)
		{
			break;
		}
}

outer:
for (int i = 0; i < 20 ;i ++ )
{
	for (int j = 0; j < 10; j++)
	{
		System.out.println("i:"+i+",j:"+j);
		if (j > 2)
		{
			break outer;//跳出标签所在的循环。
		}
	}
}

continue

忽略剩下的语句,执行下一次循环

带标签时,可以忽略标签,

outer:
for (int i = 0; i < 20 ;i ++ )
{
	for (int j = 0; j < 10; j++)
	{
		System.out.println("i:"+i+",j:"+j);
		if (j > 2)
		{
			continue outer;//忽略标签所在的循环剩下的语句,进入标签所在循环的下一个。
		}
	}
}

数组

java类型:基本类型:8个

​ 引用类型:数组、类、接口、枚举。

数组就是一种引用类型。任何已有类型,添加一组方括号就变成了数组类型。

// int -> int[]
// long -> long[]
// String -> String[]
// double -> double[]
// int[] -> int[][]
// long[][] -> long[][][]
//
创建数组对象
动态
静态

所有数组元素为数值型时,初始值为0;

默认的值:

​ 引用类型 null;
​ boolean false;

深入理解数组

数组是引用类型,引用类型和基本类型的区别在哪里?

java程序的内存可以分为:

  • 堆内存(heap):java虚拟机启动时分配的一块永久的,很大的内存区。堆内存只有一块。

  • 栈内存(stack):每次方法运行分配一块临时、很小的内存区。每个方法都有自己对应栈区,方法结束时,对应的栈区就会被回收。

  • 在方法中定义的、局部变量(不管什么类型),都放入对应的方法栈区。

  • new出来的东西,都在堆内存。堆内存中的对象,如果没有应用变量指向它,那他就会变成垃圾,等待Vm回收。

    计算机的每个内存单元(byte、字节)在操作系统都有一个编号,就像一栋大楼要为每个房间编号一样。

  • 基本类型的赋值:直接将该值放入变量所在的内存。

面向对象

  • 总决:定义类、创建对象、调用方法

    • 定义类:

      【修饰符】class 类名

      {

      //成员变量(field)

      //方法(method)

      //构造器(constructor)

      //内部类(nested class)

      //初始化块

      }--------------------------类体(有且只有以上5个)

      public class 面视题
      {
      	int age = 20;
      	double de;//成员变量
      	de = 3.4;//赋值语句。报错
      }
      

      类中5大成员!3大类型:类、接口、枚举!4个修饰符!

      • 修饰符:public、final | abstract。有且仅有。
      • 类名:语法要求(只要是标识符即可)。多个单词连缀而成,每个单词首字母大写。
    • 成员变量(field)

      • [修饰符] 类型 变量名 【=初始值】

      • 修饰符:private | protected | public 、final 、static 、(transient:序列化相关)

      • 类型:任意基本类型或引用类型

      • 变量名:语法要求,只要是标识符即可。驼峰命名法,首字母小写,后面每个单词首字母大写。用于描述该类或对象的状态,建议用名词。

    • 方法(method)

      • 【修饰符】 返回值类型 方法名(形参列表)

        {

        ​ //代码:定义变量(包括数组)、变量赋值、流程控制、

        }--------------------方法体

      • 修饰符:private | protected | public 、final | abstract 、 static

      • 返回值类型:任意基本类型或引用类型。可使用void声明没有返回值。

      • 方法名:语法要求:只要是标识符即可:驼峰写法。用于描述该类或对象的行为,通常时动词。只定义项目感兴趣的行为

      • 形参列表:形参类型 形参名

    • 构造器

      作用:new调用构造器来创建对象。如果你没有为类写构造器,系统会默认为该类提供一个无参的构造器。构造器很像一个特殊的方法,没有返回值类型声明。构造器必须与类名相同。构造器的作用:用于初始化对象----构造器永远属于实例。他不可能用static修饰。

      • 【修饰符】构造器名(形参列表)

        {

        ​ //代码:定义变量(包括数组)、变量赋值、流程控制、

        }-------------构造体

        • 构造器名必须与类名相同.

          判断一个体是否为构造器,要看两点:名称与类名相同。没有返回值类型。

        • 修饰符:private | protected | public

    • 类可以用来做什么?

      1. 所有的类都是引用类型。所有的类都可用于声明变量。很多没有main方法的类就是为主类服务的。
      2. 调用static修饰的方法或static修饰的变量。
      3. 创建对象。new构造器(参数)。
      4. 派生子类。
    • 对象可以用来做什么?

      1. 调用无static修饰的成员变量。(实例变量)
      2. 调用无static修饰的方法。(实例方法)
  • this关键字

    this可以出现非static的方法、构造器中。作用如下:

    • 出现非static方法中,this代表该方法的调用者。“谁调用该方法,this就代表谁”

    • 出现在构造器中,this代表该构造器正在初始化的对象。构造器用于对对象进行初始化

    this.的作用:用于区分方法或构造器的局部变量(尤其是与成员变量同名时)

    public class Apple
    {
    	String color;
    	double weight;
    	
    	public Apple(String color , double weight)
    	{
    		this.color = color;
    		this.weight = weight;
    	}
    }
    
  • 方法详解:

    • 方法类似于函数。但与函数不同的是,方法不能存在,方法必须定义在类里面。

    • 定义在类中的方法。从逻辑上来看,如果该方法有static修饰,该方法属于类本身,应该用类调用

      如果该方法无static修饰,该方法属于对象本身。

    • 方法不能独立执行。方法一定要看调用者。如果在调用同一个类中的方法,可以省略调用者,此时系统会添加默认的调用者。如果该方法是无static修饰的方法,添加this作为默认的调用者。

  • 形参个数可变的方法:

    类型… 形参名:形参个数可变的方法。实际是数组,写法上等价于:类型[] 形参名

    类型… 这样写的好处:调用方法时更加方便。即可直接传入多个元素,系统会自动将他们封装成数组。缺点:只能作为形参列表的最后一个元素。一个方法最多只能有一个参数可变的形参;

    递归方法

    方法调用自身–递归带来了隐式循环。要避免无限递归。一定要在可能出现的某些情况下,不在调用方法自身。

    递归要向已知方向发展。

    方法重载

    在同一个类中,有多个同名的方法,但这多个方法的形参列表不同。

    三同一不同。同一个类、返回值类型、方法名相同。参数列表不同。

    修饰符不同不算重载。

    参数传递

    java是值传递,传递的是参数的一个副本。如果

    \\交换值
    public class A
    {
    	public static void swap(int a, int b)
    	{
    		int tem = a;
    		a = b;
    		b = tem;
    	}
    	public static void main(String[] args)
    	{
    		int a = 6;
    		int b = 9;
    		A.swap(a,b);
    		System.out.println(a);//6
    		System.out.println(b);//9
    	}
    }
    
    class DataWrap
    {
    	int a = a;
    	int b = b;
    }
    public class B
    {
    	public static void swap(DataWrap dw)
    	{
    		int tem = dw.a;
    		dw.a = dw.b;
    		dw.b = tem;
    	}
    	public static void main(String[] args)
    	{
    		DataWrap dw = new DataWrap();
    		dw.a = 6;
    		dw.b = 9;
    		B.swap(dw);
    		System.out.println(dw.a);//9
    		System.out.println(dw.b);//6
    	}
    }
    
    • 如果传递的参数是基本数据类型,方法中对参数所做的修改,完全不会影响参数本身!!

    • 如果传递的是引用类型,参数的副本和参数本身指向的是同一个对象,因此方法通过参数副本修改对象时,会影响参数本身所指的对象。

    一个.java文件中可以定义多个类,但只能有一个public类。

    变量详解

    java变量(没有全局变量的概念)

    • 成员变量

      中定义成员变量

      • 类变量(有static)
      • 实例变量(无static)
    • 局部变量

      方法中定义局部变量(方法在栈中,方法执行完就被销毁)

      • 形参
      • 普通局部变量
      • 代码块的局部变量

    注意:

    • 成员变量:可以不需要显示指定初始值,系统可以自动分配初始值,初始值规则和数组元素的初始值规则相同。

      • 程序中类本身只有一个;程序一定要先有类,再有对象(实例)!

      • 类变量:类变量属于类本身,当系统初始化类时,就会为类分别分配空间,并执行初始化。

      • 实例变量:实例变量属于对象本身,系统每次创建对象时,都需要为该对象的实例变量分配空间,并执行初始化。

      • 严格来说:类变量应该由类本身进行访问。

        ​ 实例变量,应该由对象进行访问。

        但java允许用对象来访问类变量,一个对象修改了类变量以后,其他对象访问的类变量就成了修改之后的。

C:\Users\chenhongda\AppData\Roaming\Typora\typora-user-images\image-20200721094839622.png

  - Computer.java

在这里插入图片描述

  ​		ComputerTest.java

在这里插入图片描述

在这里插入图片描述

  • 局部变量:必须由程序员先显示指定初始值,然后才能使用-----否则编译报错。

  • //代码块的作用域很小,离开代码块,代码块的局部变量就失效了 
    {
    	int a = 1;
    }
    System.out.print(a);//编译报错
    

方法详解

  • 方法所属性:
  • 形参个数可变的方法
  • 递归方法
  • 方法重载(3同一不同)
  • 方法传参机制。值传递,传递到是参数的副本。

类变量-------是在第一次用该类,系统会为该类变量分配空间,并初始化。每个类的类变量都只会有一个。

实例变量----每次创建对象,系统都会为该对象的实例变量分配空间,并初始化。

封装

面向对象三大特征:封装、继承、多态。

  • 隐藏:隐藏对象的内部实现细节。

  • 暴露:将一些操作界面暴露出来。通过暴露的界面来操作对象,该对象的内部状态不会被破坏。

    合理隐藏、合理暴露。

访问控制器:

  • private -> 不写 -> protected -> public
  • private(类访问权限):该修饰符修饰的成员,只能在该类中被访问。(彻底的隐藏)
  • 不写(包访问权限):该修饰符修饰的成员,只能在该类、及该类所在包中被访问。
  • protected(子类访问权限):该修饰符修饰的成员,只能在该类、及该类所在包、该类的子类中被访问。
  • public(公类):该修饰符修饰的成员,可以在任意地方被访问。
private不写protectedpublic
当前类
同一个包×
子类××
任意×××
  • 指定原则:
    • 成员变量(实例变量),通常用private修饰,为了隐藏实现细节。
    • 为每个成员变量提供public的getter、setter方法,用于控制该成员变量的方法。
    • 需要暴露的方法,通常用public 修饰。
    • 如果希望一个方法主要用于被子类重写,用protected修饰。

不同的公司完全可以定义同名的类,为了解决不同公司、不同项目类名冲突的问题,java就引入“包”机制。就是在类名添加一个前缀。

java程序为类定义包?

  • 在源代码中加入package包名。

  • 将生成的class文件要放在对应的文件结构下。

  • 包命名规范:语法要求,只要求标识符即可。专业要求,推荐用公司域名倒写,再加项目名。

    备注:一旦你为类指定了包名之后,使用该类时应该用完整类名:包命+类名

导入包

import 的作用:为了省略写包名,如果不写import 那么每次都要写类的全名(包命+类名)。

import 包名.类名;=====每次导入一个类

import 包名.*;=====指定包的所有类,星号代表类,不可以代表包。

java默认导入 java.lang包下所有类。

import static 静态导入

可以省略写类名。用于导入指定包下的所有类变量。

import static 包名.类名.静态成员名;======每次导入一个静态成员名

import static 包名.类名.*;==========导入指定类的所有静态成员。

java源程序的结构:

一条package 语句

N个import 语句

N个class定义

构造器详解

构造器规则:

  • 构造器用于初始化对象
  • 构造器如何调用?必须用new来调用构造器,这样可以返回一个初始化完成的对象。

构造器重载:

  • 一个类中可以定义多个构造器,必须要求形参列表不同-------这就是构造器重载。

    this调用:this后紧跟一个括号(参数)。this调用代表调用同一个类中重载的构造器—this调用只能出现在构造器的第一行。具体调用哪个构造器看this括号中传入的参数。

    this引用:this后紧跟一个点:this.name;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值