02java基础——类和方法
1.类的定义
/*
定义类:
使用类的形式,对现实中的事物进行描述
事物: 属性,方法
属性: 变量
方法: 这个事物具备的功能 格式:
public class 类名{
属性定义
修饰符 数据类型 变量名 = 值 方法定义
修饰符 返回值类型 方法名(参数列表){ }
} */
#Car.java
package cn.jxufe.java.chapter2; /*
* 类的方式,描述现实中的事物 小汽车
*
* 小汽车 属性和功能
* 属性: 颜色 轮胎个数 变量定义
* 功能: 跑 方法
*
* 属性和方法,都属于类的成员
*
* 属性, 成员变量
* 方法, 成员方法
*/
public class Car {
// 定义Car类的属性 // 定义颜色属性
String color;
// 定义轮胎个数 int count; // 定义跑的功能
public void run() {
System.out.println("小汽车在跑 ..." + color + "..." + count);
} }
#TestCar.java
package cn.jxufe.java.chapter2; public class TestCar { public static void main(String[] args) {
// TODO Auto-generated method stub
Car c = new Car();
// 对象.调用类中的属性和方法
c.color = "无色";
c.count = 5;
c.run();
} }
2.成员变量和局部变量对比
/*
* 成员变量和局部变量的区别
*
* 1. 定义位置上的区别
* 成员变量,定义在类中,方法外
* 局部变量,方法内,语句内
*
* 2. 作用域不同
* 成员变量,作用范围是整个类
* 局部变量,方法内,语句内
*
* 3. 默认值不同
* 成员变量,有自己的默认值
* 局部变量,没有默认值,不赋值不能使用
*
* 4. 内存位置不同
* 成员变量,跟随对象进入堆内存存储
* 局部变量,跟随自己的方法,进入栈内存
*
* 5. 生命周期不同
* 成员变量,跟随对象,在堆中存储,内存等待JVM清理 , 生命相对较长
* 局部变量,跟随方法,方法出栈 生命相对较短
*/
3.方法参数是基本数据类型和引用数据类型的区别
#Person.java
package cn.jxufe.java.chapter2.demo2; public class Person {
String name;
}
# TestPerson
package cn.jxufe.java.chapter2.demo2; /*
* 方法的参数类型,是基本数据类型,引用数据类型
*/
public class TestPerson {
public static void main(String[] args) {
int a = 1;
function(a);
System.out.println(a); Person p = new Person();
p.name = "张三";
System.out.println(p.name); function(p); System.out.println(p.name);
} /*
* 定义方法,参数类型是引用数据类型 参数是Person类型 p接受的是一个内存的地址 main 中的
* 变量p function 中的变量p 保存的地址是一样的
*/
public static void function(Person p) {
p.name = "李四";
} /*
* 定义方法,参数类型是基本数据类型
*/
public static void function(int a) {
a += 5;
}
}
4.实例变量和类变量、常量、方法
package cn.jxufe.java.chapter2.demo8; public class TestCircleWithStaticMembers { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("before creating objects");
System.out.println("the number of Circle objects is " + CircleWithStaticMembers.numberOfObjects); CircleWithStaticMembers c1 = new CircleWithStaticMembers(); System.out.println("\nAfter creating c1");
System.out.println("c1: radius " + c1.radius + " and number of Circle objects " + c1.numberOfObjects); CircleWithStaticMembers c2 = new CircleWithStaticMembers(5); System.out.println("\nAfter creating c2");
System.out.println("c1: radius " + c1.radius + " and number of Circle objects " + c1.numberOfObjects);
System.out.println("c2: radius " + c2.radius + " and number of Circle objects " + c2.numberOfObjects);
} }
使用下面的方法进行改正
package cn.jxufe.java.chapter2.demo9; public class StaticMethod {
int i = 5;
static int k = 2; public static void main(String[] args) {
StaticMethod a = new StaticMethod();
int j = a.i;
a.m1();
} public void m1() {
i = i + k + m2(i, k);
System.out.println("i = " + i);
} public static int m2(int i, int j) {
return (int) (Math.pow(i, j));
} }
5.构造方法
#SimpleCircle
package cn.jxufe.java.chapter2.demo3; public class SimpleCircle {
double radius; public SimpleCircle() {
// TODO Auto-generated constructor stub
radius = 1;
} public SimpleCircle(double radius) {
this.radius = radius;
} public void setRadius(double radius) {
this.radius = radius;
} double getArea() {
return radius * radius * Math.PI;
} double getPerimeter() {
return 2 * radius * Math.PI;
}
}
#TestSimpleCircle
package cn.jxufe.java.chapter2.demo3; public class TestSimpleCircle { public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleCircle circle1 = new SimpleCircle();
System.out.println("the area of the circle of radius " + circle1.radius + " is " + circle1.getArea()); SimpleCircle circle2 = new SimpleCircle(25);
System.out.println("the area of the circle of radius " + circle2.radius + " is " + circle2.getArea()); SimpleCircle circle3 = new SimpleCircle(125);
System.out.println("the area of the circle of radius " + circle3.radius + " is " + circle3.getArea());
} }
6.private关键字
描述人。Person
属性:年龄。
行为:说话:说出自己的年龄。
#Person.java
package cn.jxufe.java.chapter2.demo4; public class Person {
int age;
String name; public void show() {
System.out.println(" age= " + age + " name " + name);
}
}
#TestPerson.java
package cn.jxufe.java.chapter2.demo4; public class TestPerson {
public static void main(String[] args) {
// 创建Person对象
Person p = new Person();
p.age = -20; // 给Person对象赋值
p.name = "人妖";
p.show(); // 调用Person的show方法
}
}
通过上述代码发现,虽然我们用Java代码把Person描述清楚了,但有个严重的问题,就是Person中的属性的行为可以任意访问和使用。这明显不符合实际需求。
可是怎么才能不让访问呢?需要使用一个Java中的关键字也是一个修饰符 private(私有,权限修饰符)。只要将Person的属性和行为私有起来,这样就无法直接访问。
#Person.java
package cn.jxufe.java.chapter2.demo5; public class Person {
private int age;
String name; // private是成员修饰符,不能修饰局部变量,被private修饰的成员变量,只能在该类的内容使用,超出该类的范围都不能使用。
public void setAge(int age) {
if (age < 0 || age > 130) {
System.out.println(age + " 不符合年龄范围");
return;
} else {
this.age = age;
}
} public void show() {
System.out.println(" age= " + age + " name " + name);
}
}
#TestPerson.java
package cn.jxufe.java.chapter2.demo5; import cn.jxufe.java.chapter2.demo5.Person; public class TestPerson {
public static void main(String[] args) {
// 创建Person对象
Person p = new Person();
p.setAge(-20); // 给Person对象赋值
p.name = "人妖";
p.show(); // 调用Person的show方法
}
}
总结:
类中不需要对外提供的内容都私有化,包括属性和方法。
以后再描述事物,属性都私有化,并提供setXxx getXxx方法对其进行访问。
注意:私有仅仅是封装的体现形式而已。
7.this关键字
局部变量和成员变量同名问题
不加this,就近原则调用
package cn.jxufe.java.chapter2.demo6; public class Person {
int age;
public void speak() {
int age = 18;
System.out.println("age = " + age);
}
}
package cn.jxufe.java.chapter2.demo6; public class TestPerson { public static void main(String[] args) {
// TODO Auto-generated method stub
Person person = new Person();
person.age = 28;
person.speak();
System.out.println("person.age= " + person.age);
} }
加this,指明了调用的是成员变量
package cn.jxufe.java.chapter2.demo6; public class Person {
int age;
public void speak() {
int age = 18;
System.out.println("age = " + this.age);
}
}
package cn.jxufe.java.chapter2.demo6; public class TestPerson { public static void main(String[] args) {
// TODO Auto-generated method stub
Person person = new Person();
person.age = 28;
person.speak();
System.out.println("person.age= " + person.age);
} }
this哪个对象调用了this所在的方法,this就代表哪个对象。
8.访问权限
9.java库中的类
9.1Date类
package cn.jxufe.java.chapter2.demo7; import java.util.Date; public class DateTest { public static void main(String[] args) {
// TODO Auto-generated method stub
Date date = new Date();
System.out.println("the elapsed times since Jan 1,1970 is " + date.getTime() + " milliseconds");
System.out.println(date.toString());
} }
9.2Random类
package cn.jxufe.java.chapter2.demo7; import java.util.Random; public class ch02RandomTest { public static void main(String[] args) {
// TODO Auto-generated method stub
Random random1 = new Random(3);
System.out.println("from random1:");
for (int i = 0; i < 10; i++) {
System.out.print(random1.nextInt(10)+ " ");
} Random random2 = new Random(3);
System.out.println("\nfrom random2:");
for (int i = 0; i < 10; i++) {
System.out.print(random2.nextInt(10) + " ");
}
} }
10.面向对象的简单应用
10.1贷款的例子
package cn.jxufe.java.chapter2.demo10; import java.util.Date; public class Loan {
private double annuInterestRate;
private int numberOfYears;
private double loanAmount;
private Date loanDate; public Loan() {
// TODO Auto-generated constructor stub
this(2.5, 1, 1000); // 相当于直接调用下面的构造方法
} public Loan(double annuInterestRate, int numberOfYears, double loanAmount) {
this.annuInterestRate = annuInterestRate;
this.numberOfYears = numberOfYears;
this.loanAmount = loanAmount;
loanDate = new Date();
} public double getAnnuInterestRate() {
return annuInterestRate;
} public void setAnnuInterestRate(double annuInterestRate) {
this.annuInterestRate = annuInterestRate;
} public int getNumberOfYears() {
return numberOfYears;
} public void setNumberOfYears(int numberOfYears) {
this.numberOfYears = numberOfYears;
} public double getLoanAmount() {
return loanAmount;
} public void setLoanAmount(double loanAmount) {
this.loanAmount = loanAmount;
} public Date getLoanDate() {
return loanDate;
} public void setLoanDate(Date loanDate) {
this.loanDate = loanDate;
} public double getMonthlyPayment() {
double monthlyInterestRate = annuInterestRate / 1200;
double monthlyPayment = loanAmount * monthlyInterestRate
/ (1 - (1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12)));
return monthlyPayment;
} public double getTotalPayment() {
double totalPayment = getMonthlyPayment() * numberOfYears * 12;
return totalPayment;
} }
package cn.jxufe.java.chapter2.demo10; import java.util.Scanner; public class TestLoan { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("enter annual interest rate,for example,8.25:");
double annualInterestRate = input.nextDouble(); System.out.println("enter number of years as an integer: ");
int numberOfYears = input.nextInt(); System.out.println("enter loan amount,for example,12000: ");
double loanAmount = input.nextDouble(); Loan loan = new Loan(annualInterestRate, numberOfYears, loanAmount); //注意此处的 printf
System.out.printf("the loan was created on %s\n " + "the monthly payment is %.2f\n The total paymen is %.2f\n",
loan.getLoanDate().toString(), loan.getMonthlyPayment(), loan.getTotalPayment()); } }
10.2设计栈类
package cn.jxufe.java.chapter2.demo11; public class StackOfInteger {
private int[] elements;
private int size;
public static final int DEFAULT_CAPACITY = 16; public StackOfInteger(int capacity) {
// TODO Auto-generated constructor stub
elements = new int[capacity];
} public StackOfInteger() {
this(DEFAULT_CAPACITY);
} public void push(int value) {
if (size >= elements.length) {
int[] temp = new int[elements.length * 2];
System.arraycopy(elements, 0, temp, 0, elements.length);
elements = temp;
}
elements[size++] = value;
} public int pop() {
return elements[--size];
} public int getSize() {
return size;
} public boolean empty() {
return size == 0;
}
}
package cn.jxufe.java.chapter2.demo11; public class TestStackOfInteger { public static void main(String[] args) {
// TODO Auto-generated method stub
StackOfInteger stack = new StackOfInteger(); for (int i = 0; i < 10; i++) {
stack.push(i);
}
while (!stack.empty()) {
System.out.print(stack.pop() + " ");
}
} }
02java基础——类和方法的更多相关文章
- c#面向对象基础 类、方法、方法重载
C#是纯粹的面向对象编程语言,它真正体现了“一切皆为对象”的精神.在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object(Object为所有类型的基类 ...
- python基础--类的方法
一:类的方法说明 类的方法分为实例方法,析构方法,构造方法,类方法,静态方法,属性方法,等等 类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用 类方法的隐含调用参数是类,而类实例方 ...
- Python基础——类new方法与单例模式
介绍: new方法是类中魔术方法之一,他的作用是给类实例化开辟一个内存地址,并返回一个实例化,再由__init__对这个实例进行初始化,故它的执行肯定就是在初始化方法__init__之前了.new方法 ...
- .NET正则基础——.NET正则类及方法应用
1 概述 初学正则时,对于Regex类不熟悉,遇到问题不知道该用哪种方法解决,本文结合一些正则应用的典型应用场景,介绍一下Regex类的基本应用.这里重点进行.NET类的介绍,对于正则的 ...
- JAVA基础(二)—— 常用的类与方法
JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...
- Java基础之对包,类,方法,变量理解(灵感)
包,类,方法,变量 灵感乍现 感觉就如电脑上的各个大小文档一般,只不过名称不同,用法不同,功效不同,就好比你要调用网上的一个图片,这个图片可以是变量,可以是方法,可以是类.你要调用可以把他幻化成接口, ...
- 【Python基础】之函数、类和方法
一.函数 1. def定义函数 Python Shell: def add(a,b): return a+b >>>add(1,2) 3 def add(a=1,b=2): retu ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- day20-Python运维开发基础(装饰器 / 类中的方法 / 类的方法变属性)
1. 装饰器 / 类中的方法 / 类的方法变属性 # ### 装饰器 """ 定义:装饰器用于拓展原来函数功能的一种语法,返回新函数替换旧函数 优点:在不更改原函数代码的 ...
随机推荐
- swagger2简单使用
1.引入jar <!--引入swagger--> <dependency> <groupId>io.springfox</groupId> <ar ...
- iframe嵌套页面 跨域
父级调用iframe方法: document.getElementById("iframe").contentWindow.func(data1,data2...) 子级 ifra ...
- 在HTML标签元素中,绑定JS函数
<a onclick="ShowMsg(this)" id="myA" href="#">按钮</a> //JS方法 ...
- SecureCRT通过密钥登录
转载 https://blog.csdn.net/langkeziju/article/details/53024031 说明:一般的密码方式登录容易被密码暴力破解.所以一般我们会将 SSH 的端口 ...
- serial redirection
int setOption(int fd,int nSpeed, int nBits, char mode,char nEvent, int nStop) { struct termios newti ...
- STL标准库-容器-set与map
STL标准库-容器-set与multiset C++的set https://www.cnblogs.com/LearningTheLoad/p/7456024.html STL标准库-容器-map和 ...
- eclipse经常卡死
修改eclipse.ini 将启动内存,最小内存,最大内存都增大 eclipse是内存不够再去申请,直到有最大内存的 若上述方法不行则换eclipse eclipse有的版本是不稳定的,我用Ke ...
- 写入mongodb
https://blog.csdn.net/u013421629/article/details/78885079 https://www.jianshu.com/p/7d14c3ad810f 可视 ...
- 递归算法之Fibonacci 斐波那契数列第n个数的求解
Fibonacci 斐波那契数列第n个数的求解,也可以用递归和非递归的形式实现,具体如下,dart语言实现. int fibonacci(int n) { if (n <= 0) throw S ...
- 【linux开发】Linux下配置java环境 安装eclipse
配置JDK环境 本文转自:http://www.cnblogs.com/fnng/archive/2013/01/30/2883815.html,有修改 下载 登录oracle的网站去下载JDK1.8 ...