一个文件中定义多个类注意:
1.只能有一个类是 public修饰的;
2.主方法所在的类的名字 与文件名一致;
3.通常 主方法所在的类 用public修饰。
举例:
/**
* 这是一个狮子类
* @author 郭靖
* @version 1.0
*/
class Lion{
/** 颜色 */
String color;
/** 品牌 */
String brand;
/** 价格 */
double price;
/**
* 这是 跑 的功能实现
*/
public void run() {
System.out.println(color + "颜色的"
+ brand + "品牌的"
+ price +"价格的电动狮子在跑");
}
/**
* 这是 返回声音的方法
* @return 得到的是一个字符串 声音
*/
public String sound() {
return "吼声………………";
}
}
/**
* 这是一个测试类
* @author 郭靖
* @version 1.0
*/
public class TestLion {
/**
* 这是主方法,运行代码
* @param args 这是一个字符串数组
*/
public static void main(String[] args) {
Lion lion = new Lion();
lion.color = "黄色";
lion.brand = "爱学习";
lion.price = 55.5;
lion.run();
String s = lion.sound();
System.out.println(s);
}
}
成员变量:在类中定义的变量。
局部变量:在方法中定义的变量。
区别:1.作用域
成员变量在整个类中都有效;
局部变量 只能在声明它的方法中有效。
2.优先级
成员变量和局部变量同名,在局部变量作用域内优先使用局部变量。
区分: this.成员变量名
3.初始值
局部变量 需要自己初始化后才能使用;
成员变量系统自动初始化。
整数: 0
浮点: 0.0
布尔: false
字符: ‘\u0000’
引用: null
举例:
/**
* 变量
*/
public class TestDemo {
//
int n1 = 11;
int num;
public void f1() {
//
int n1 = 33;
//int n2 = 22;
System.out.println(n1);
System.out.println(this.n1);
}
public void f2() {
int n2 = 22;
System.out.println(n1);
System.out.println(n2);
}
public void f3() {
int n ;
//n = 44;//显示初始化
// System.out.println(n);//没有初始化
}
public static void main(String[] args) {
TestDemo test = new TestDemo();
System.out.println(test.num);
//System.out.println(test.n1);
// test.f1();
}
}
class Juicer{
// 形式参数 (局部变量)
public String juicing(String food , String food1) {// String food = "西瓜";
return food + food1 + "汁";
}
}
public class TestJuicer {
public static void main(String[] args) {
Juicer juicer001 = new Juicer();
// 实际参数 (数据)
String s = juicer001.juicing("西瓜","苹果");
s = s + "做点心";
System.out.println(s);
}
}
1、值类型
public class TestParam {
public void f1(int n) {// int n = 11;
n = 22;
}
public static void main(String[] args) {
TestParam test = new TestParam();
int n = 11;
test.f1(n);
System.out.println(n);//11
}
}
class Param{
int value;
}
public class TestParam {
public void f2(Param p ) {// Param p = p;
p.value = 22;
}
public static void main(String[] args) {
TestParam test = new TestParam();
Param p = new Param();
p.value = 11;
test.f2(p);
System.out.println(p.value);//22
}
}
class Param{
int value;
}
public class TestParam {
public void f3(Param p ) {// Param p = p;
p = new Param();
p.value = 22;
}
public static void main(String[] args) {
TestParam test = new TestParam();
Param p = new Param();
p.value = 11;
test.f3(p);
System.out.println(p.value);//11
}
1)5个数求和
public int sum(int[] arr) {// int [] arr = arr;
int num = 0;
for(int i = 0; i < arr.length; i++) {
num += arr[i];
}
return num;
}
public static void main(String[] args) {
TestParam1 test = new TestParam1();
int [] arr = {1,2,3};
int num = test.sum(arr);// int
System.out.println(num);
}
public int [] reverse(int[] arr) {
int [] arr1 = new int[arr.length];
for(int i = 0,j = arr.length-1; i < arr1.length; i++,j--) {
arr1[i] = arr[j];
}
return arr1;
}
public static void main(String[] args) {
TestParam1 test = new TestParam1();
int [] arr = {1,2,3};
System.out.println(Arrays.toString(test.reverse(arr)));
}
语法: …
好处:传递参数灵活
数组参数 和 可变参数 区别:
public class TestVarParam {
public void method(int [] arr) {
System.out.println(Arrays.toString(arr));
}
// ...底层是数组
public void method1(int ...arr) {
System.out.println(Arrays.toString(arr));
System.out.println(arr.length);
}
// 可变参数 放在最后
public void method2(int n ,int ...arr) {
}
// 可变参数只能有一个
public void method2(int ...arr1) {
}
public static void main(String[] args) {
TestVarParam test = new TestVarParam();
int [] arr = {11,22,33};
// test.method(arr);
// test.method1(arr);//[11, 22, 33]
// test.method1(11);//new int[]{11}
// test.method1(11,22);// new int[]{11,22}
test.method1();// new int[]{}
}
}
public static void main(String[] args) {
System.out.println(args.length);
System.out.println(Arrays.toString(args));
}
import java.util.Scanner;
class Math1{
/**
* 数字反转
* @param n 用户输入一个数字
* @return 反转后的数字
*/
public int reverse(int n) {
int num;
int sum = 0;
while(n > 0) {
num = n % 10;// 2345
sum = sum * 10 + num;
n = n / 10;
}
return sum;
}
/**
* 判断是否是偶数
* @param n 数字
* @return 是否是偶数,true是
*/
public boolean isEven(int n) {
if(n % 2 == 0) {
return true;
}else {
return false;
}
}
/**
* 计算阶乘
* @param n 数字
* @return 累乘的结果
*/
public int fac(int n) {
int sum = 1;
for(int i = 1; i <= n; i++) {
sum *= i;
}
return sum;
}
/**
* 计算两个数字范围的累加和
* @param start 起始数字
* @param end 终止数字
* @return 累加和
*/
public int sum(int start ,int end) {
if(start > end) // 100 ,1
return 0;
int sum = 0;
for(int i = start ; i <= end; i++) {
sum += i;
}
return sum;
}
}
public class TestMath_exam {
public static void main(String[] args) {
Math1 test = new Math1();
Scanner input = new Scanner(System.in);
System.out.println("--输入一个数字:");
int n = input.nextInt();
System.out.println( test.reverse(n));
System.out.println("--输入一个数字:");
n = input.nextInt();
System.out.println(test.isEven(n));
System.out.println("--输入一个数字:");
n = input.nextInt();
System.out.println(test.fac(n));
System.out.println("--输入起始位置和终止位置");
int start = input.nextInt();
int end = input.nextInt();
System.out.println(test.sum(start, end));
}
}
/**
* 方法调用
* */
class Phone{
//成员变量: 实例成员变量,类域
String color;
public String download() {
return "小苹果";
}
public void play() {
System.out.println(color + "颜色的手机在播放:" + download());
}
public void charging() {
//变量: 局部变量
Cell cell = new Cell();//装一块电池
cell.brand = "华为";
cell.storage();//蓄电
}
}
class Cell{
String brand;
public void storage() {
System.out.println(brand + "品牌的电池在蓄电");
}
}
public class TestPhone_exam {
public static void main(String[] args) {
Phone huawei = new Phone();
huawei.color = "白色";
huawei.charging();//先充电
huawei.play();//在播放歌曲
}
}
1.同一个程序包下不能定义同名的类
2.对象放在堆里面,不会被频繁销毁
3.主方法的参数传递,采取命令行参数传递的方式