首页 > 代码库 > 2017.06.06-日记-面向对象-this关键字及JAVA源文件结构
2017.06.06-日记-面向对象-this关键字及JAVA源文件结构
这是今天的笔记,只是一些理论,后面有几个练习一块贴上来了,
this:当前类的对象引用
使用场合(都是类的内部):
1.获取实例本身 public A getA(){return this}
2.获取类的成员变量 this.属性
3.获取类的成员方法 this.方法名()
4.获取类的构造方法 this()
JAVA中方法的传参都是值传递,就是将数据复制一份放入方法形参
基本数据类型:将实参的值复制一份传入形参
结果:对形参进行修改不会改变实参
引用数据类型:将引用类型的内存地址复制一份传入形参
结果:
1.对形参修改会引发形参地址所指向的那个内存数据变化而引发实参变化 (内存地址不变化)
2.如果在传入的方法内部对形参的地址进行修改,则形参的新地址指向的内存数据的变化和实参无关(内存地址变化)
JAVA源文件结构
1.包声明--package xx.xx.;
2.导入声明--import xx.xx.类名;
3.类声明--public class 类名{}
4.属性声明--private 数据类型(基本类型and引用类型) 属性名;
5.成员方法声明--修饰符 返回值类型(基本,引用) 方法名(形参列表(形参数据类型1 形参名称2,形参数据类型2 形参名称2)..){}
6.构造方法声明--修饰符 类名(形参列表){}
练习:
1.获取用户输入的随机两个整数,并计算它们之间有多少个能被5整除的数的和并打印输出.
解题思路:
首先,获取用户输入两个数,
import java.util.Scanner;//导包
public class Demo1{
public static void main(String[] args){
//创建Scanner对象
Scanner input = new Scanner(System.in);
//提示输入
System.out.println("请输入第一个整数:");
int in1 = input.nextInt();//接收第一个数
System.out.println("请输入第二个整数:");
int in2 = input.nextInt();//接收第二个数
int sum = 0; //声明一个变量sum用来存储总和
//for循环
//三元运算符, i=输入的最小值; i<=输入最大值; i++
for(int i = in1 < in2 ? in1 : in2; i <= in1 > in2 ? in1 : in2; i++){
if(i % 5 ==0){
sum += i;//循环累加
}
}
System.out.println(in1 + "到" + in2 + "之间能被5整除的数的和为:" + sum);
}
}
2.桌子分别是什么价格?
一个家具店里有三种桌子,价格如下:
a.他们的价格各不相同.
b.它们的单价加起来共4000元.
c.第二种桌子比第一种桌子便宜400元.
d.第三种桌子的单价是第二种的2倍.
那么这三种桌子的单价分别是多少?
public class Demo03 {
public static void main(String[] args) {
//i为第一种桌子单价,j第二种,k第三种
for (int i = 0; i <= 4000; i++) {
int j = i - 400, k = j * 2;//j的价格比i便宜400,k的价格是j的2倍
if (i + j + k == 4000) {//他们的总和是4000
System.out.println("第一种桌子的单价是" + i + "元");
System.out.println("第二种桌子的单价是" + j + "元");
System.out.println("第三种桌子的单价是" + k + "元");
}
}
}
}
此题解法有多种,也可以用三个for循环,比如下面的题:
3.我手里有1元,2元,5元的人民币共60张,总值是200元,并且1元面值的人民币比2元的人民币多4张,求三种面值人民币各有多少张?
解法:三个for循环:
public class Demo02 {
public static void main(String[] args) {
//i,j,k分别为1,2,5元面值的张数;
for (int i = 0; i <= 200 / 1; i++) {
for (int j = 0; j <= 200 / 2; j++) {
for (int k = 0; k <= 200 / 5; k++) {
//i比j多4张, 三者之和为60张, 总面值为200;
if ((i - j == 4 && i + j + k == 60) && i + j * 2 + 5 * k == 200) {
System.out.println("1元的有" + i + "张");
System.out.println("2元的有" + j + "张");
System.out.println("5元的有" + k + "张");
}
}
}
}
}
}
还有两题是前两天讲的信息封装和隐藏,代码比较繁多,但难度不高,多写一下就明白了;
public class Game {//创建game类
private String name;// 名字//成员变量name,并且私有化
//下面是封装,就是 set意思是存值,可以理解为seve(保存)的首字母
// get意思是取值,可理解为get out(出去)的首字母,方便记忆
public String getName() {
return name;//取值将name返回
}
public void setName(String playName) {
//存值,若要限制别人的输入,可在这里附加限制条件,这里是如果设置的名称(playName)的长度>=2并且<=8,那么就将设置的名字(playName)赋给name属性,就是可以正常输出,否则将执行else代码,将赋给一个默认值,这里设置默认值为提示"角色名为2~8位字符"这样当用户输入不合理的时候会进行提醒
if (playName.length() >= 2 && playName.length() <= 8) {
name = playName;
} else {
name = "角色名为2~8位字符";
}
}
public Game(){
//记得类中添加一个无参构造方法,要不然使用的时候没有就尴尬了- -!
}
}
好了今天差不多就这些了.努力吧各位!
2017.06.06-日记-面向对象-this关键字及JAVA源文件结构