首页 > 编程语言 >【学懂Java】(四)面向对象编程-3

【学懂Java】(四)面向对象编程-3

时间:2023-01-21 21:31:14浏览次数:65  
标签:Java int age System 学懂 面向对象编程 println public out

一.代码块

1.概念

使用”{}”括起来的一段代码

2.分类

根据位置可分类

普通代码块:

定义在方法中的使用{}括起来的代码

public class CodeBlockDemo {
public void test(){
System.out.println("test");{
System.out.println("测试");
}
}

public static void main(String[] args) {
CodeBlockDemo codeBlockDemo = new CodeBlockDemo();//因为test是非static类型,所以不能在static的main里直接调用
codeBlockDemo.test();{
System.out.println("main");
}
}
}

【学懂Java】(四)面向对象编程-3_import


构造代码块:

直接写在类中,用{}括起来的代码

public class CodeBlockDemo {
{
System.out.println("构造代码块");
}
public void test(){
System.out.println("test");{
System.out.println("测试");
}
}

public static void main(String[] args) {
CodeBlockDemo codeBlockDemo = new CodeBlockDemo();
codeBlockDemo.test();{
System.out.println("main");
}
}
}

【学懂Java】(四)面向对象编程-3_import_02

通过反编译工具我们发现它将这段代码加在了构造方法中,在创建对象时默认调用了方法进行初始化,因此先打印了构造代码块

【学懂Java】(四)面向对象编程-3_访问权限_03

每次代码运行的时候会将构造代码块中的代码添加到每个构造方法前面,当使用this()时不会添加例如

public class CodeBlockDemo {

int a;
int b;
public CodeBlockDemo(){
System.out.println("构造方法");
}

public CodeBlockDemo(int a){
this.a=a;
}

public CodeBlockDemo(int a,int b){
this(a);
this.b=b;
}

{
System.out.println("构造代码块");
}
public void test(){
System.out.println("test");{
System.out.println("测试");
}
}

public static void main(String[] args) {
CodeBlockDemo codeBlockDemo = new CodeBlockDemo();
codeBlockDemo.test();{
System.out.println("main");
}
}
}

反编译得

【学懂Java】(四)面向对象编程-3_import_04

静态代码块:

使用static声明的代码块,在程序载入的时候优先执行(意味着不需要创建对象也会执行)

  • 数据库连接等其他需要准备好的代码会放在static中
public class CodeBlockDemo {

int a;
int b;

static {
System.out.println("静态代码块");
}

public CodeBlockDemo(){
System.out.println("构造方法");
}

public CodeBlockDemo(int a){
this.a=a;
}

public CodeBlockDemo(int a,int b){
this(a);
this.b=b;
}

{
System.out.println("构造代码块");
}
public void test(){
System.out.println("test");{
System.out.println("测试");
}
}

public static void main(String[] args) {
CodeBlockDemo codeBlockDemo = new CodeBlockDemo();
codeBlockDemo.test();{
System.out.println("main");
}
}
}

【学懂Java】(四)面向对象编程-3_package_05

同步代码块:

多线程的时候会使用,用来给分享空间进行加锁操作

​http://mashibing.com​

北京马士兵教育

公众号:马士兵《 Java系列课程》

二.package

就是包,对应到文件就是多级管理目录

1.解决问题

  • 文件同名问题
  • 为了方便管理类,将具体处理功能的代码放到同一个目录下

2.使用

一般定义package会放置在Java文件的第一行

【学懂Java】(四)面向对象编程-3_package_06

完全定义名:包名+类名

3.JDK中的主要包

  • java.lang(不需要手动导入)
  • 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
  • java.awt
  • 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
  • java.net
  • 包含执行不网络相关的操作的类。
  • java.io
  • 包含能提供多种输入/输出功能的类。
  • java.util
  • 包含一些实用工具类,如定义系统特性、使用不日期日历相关的函数。

4.import

当需要引入非lang包的其他java类的时候,需要使用import,否则每次在使用某个类的时候都需要将类的完全限定名写上

注意:当一个java文件中需要使用多个同名的类时,只能import一个,其余的用完全限定名

用法:

  • import java.包名.类名:导入具体的类,推荐使用
  • import 包名.*:导入当前包的所有类

静态导包:

当需要使用一个或某个类的多个方法时,但又不想重复写类名时,可以使用静态导包。

import static java.lang.Math.*
...
System.out.println(sqrt(2));
System.out.println(Math.sqrt(2));
//两者效果一样

 三.封装encapsulation(面向对象四大特征)

1.引入

package com.ak27;
public class Dog {
String name;
int age;
String color;
public Dog(){

}
public Dog(String name,int age,String color){
this.age=age;
this.color=color;
this.name=name;
}
public void eat(){
System.out.println("eating meat");
}

public void play(){

System.out.println("basketball");
}
public void show(){
System.out.println("name:"+this.name);
System.out.println("age:"+this.age);
System.out.println("color:"+this.color);
}
}
package com.ak27;
public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name="旺财";
dog.age=-11;
dog.color="black";
dog.show();
}
}

​dog.age=-11;​​如果任何一个处理类都可以直接对Dog进行赋值操作,那么当值不正确的时候,可能会产生额外结果。如何在赋值的同时添加逻辑判断------封装。

package com.ak27;

public class Dog {
String name;
private int age;//访问修饰符保障不是谁都可以访问赋值
String color;
public Dog(){
}
public Dog(String name,int age,String color){
this.age=age;
this.color=color;
this.name=name;
}
/*------------------------封装 --------------------------*/
public void setAge(int age){
if(age>0){
this.age = age;
}else{
System.out.println("输入年龄不规范");
}
}
/*------------------------------------------------------*/
public void eat(){
System.out.println("eating meat");
}
public void play(){

System.out.println("basketball");
}
public void show(){
System.out.println("name:"+this.name);
System.out.println("age:"+this.age);
System.out.println("color:"+this.color);
}
}
package com.ak27;
public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name="旺财";
//int age = -12;
dog.setAge(-11);
dog.color="black";
dog.show();
}
}

2.概念

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

3.作用

使用封装可以保障数据的规范,不符合规范的数据将无法进行操作。

4.好处

1.隐藏类的内部实现细节

2.只能通过提供的方法进行访问,其他无法访问

3.可以根据需求添加复杂的逻辑判断语句

4.方便修改实现

5.总结

面向对象的封装(狭义):

  • 将类中的属性设置为私有属性,提供共有的外部方法程序进行调用,可以实现丰富的细节操作

广义的封装:

  • 可以将完成特点功能的代码块封装成一个方法,供不同的程序进行调用

我们程序设计要追求“高内聚,低耦合”。

高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;

低耦合 :仅暴露少量的方法给外部使用。

package com.ak27;

public class Dog {
private String name;
private int age;
private String color;

public Dog(){
}
public Dog(String name,int age,String color){
this.age=age;
this.color=color;
this.name=name;
}

public void setAge(int age){
if(age>0){
this.age = age;
}else{
System.out.println("输入年龄不规范");
}
}

public int getAge(){
return this.age;
}

public void setName(String name){
this.name=name;
}

public String getName(){
return this.name;
}

public void setColor(String color){
this.color=color;
}

public String getColor(){
return this.color;
}

public void eat(){
System.out.println("eating meat");
}

public void play(){

System.out.println("basketball");
}

public void show(){
System.out.println("name:"+this.name);
System.out.println("age:"+this.age);
System.out.println("color:"+this.color);
}
}
package com.ak27;

public class DogTest {
public static void main(String[] args) {
Dog dog = new Dog();
dog.setName("旺财");
dog.setAge(12);
dog.setColor("Black");
System.out.println(dog.getAge());
System.out.println(dog.getName());
System.out.println(dog.getColor());
dog.show();
}
}

【学懂Java】(四)面向对象编程-3_代码块_07

四.Java中明确定义了访问权限

1.限制访问

  • public:共有的
  • 当前项目的所有类都可以访问
  • protected:受保护的
  • 可以被当前类访问,可以被当前包访问,也可以被子类访问
  • default:默认权限
  • 默认权限,可以被当前类访问,可以被当前包访问
  • private:私有权限
  • 只能被当前类访问

【学懂Java】(四)面向对象编程-3_封装_08

2.封装要点中的权限设置

类的属性的处理:

  • 一般使用private. (除非本属性确定会让子类继承)
  • 提供相应的get/set方法来访问相关属性. 这些方法通常是public,从而提供对属性的读取操作。 (注意:boolean变量的get方法是用:is开头!)

方法的属性的处理:

  • 一些只用于本类的辅助性方法可以用private,
  • 希望其他类调用的方法用public

3.利用权限了解值传递

当方法的参数值时基本数据类型的时候,不会改变原来的值

当方法的参数值是引用类型的时候,如果改变了该引用类型的值,会改变原来的对象的值

package com.ak27;

public class Change {
public static void test(Point point){
int x = point.getX();
int y = point.getY();
point.setX(y);
point.setY(x);
}

public static void main(String[] args) {
Point point =new Point(2,3);
test(point);
System.out.println(point.getX());
System.out.println(point.getY());
}
}
package com.ak27;

public class Point {
private int x;
private int y;

public Point(int x,int y){
this.x=x;
this.y=y;
}

public void setX(int x) {
this.x=x;
}

public int getX() {
return x;
}


public void setY(int y){
this.y=y;
}

public int getY(){
return y;
}
}

【学懂Java】(四)面向对象编程-3_访问权限_09













标签:Java,int,age,System,学懂,面向对象编程,println,public,out
From: https://blog.51cto.com/u_15796276/6021143

相关文章

  • JAVAWeb学习
    1、基本概念web开发:web,网页的意思静态webhtml,css提供给所有人看的数据始终不会发生变化动态web淘宝,几乎所有的网站提供给所有人看的数据始终会发生变化,每个......
  • 【学懂Java】(四)面向对象编程-4
    一.继承(面向对象编程四大特征)继承优化前:代码重复,不利于修改继承优化后:代码简明,利于修改1.概念类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。提高......
  • java常识
    ......
  • JavaScript 异步编程
    JavaScript是一种单线程语言,这意味着只有一个线程可以在同一时间执行JavaScript代码。在JavaScript中,异步编程是一种编写不阻塞代码的方式,它可以在不影响页面响应的情......
  • JavaScript 中 this 关键字的作用和如何改变其上下文
    一、this关键字的作用JavaScript中的this关键字引用了所在函数正在被调用时的对象。在不同的上下文中,this的指向会发生变化。在全局上下文中,this指向全局对象(在浏......
  • javascript: node.js
     consthttp=require("http");http.createServer(function(request,response){response.writeHead(200,{'Content-type':'text/html'});response.end('<h1>......
  • 前端面试题 - javaScript系列
    Time:2023-01-2021:14:37ES6系列1.说说var、let、const之间的区别var、let、const三者区别可以围绕下面五点展开:变量提升暂时性死区块级作用域重复声明修......
  • java读取Excel成List对象数组
    文件IO是任何软件进行的重要组成部分,我们在电脑上创建一个Excel文件,然后打开它修改一些东西或者删除它。Java给我们提供了操纵文件的很多工具类,本文主要是使用POI操纵Excel......
  • 【Javaweb】Servlet五 | HTTP协议【详解】
    什么是HTTP协议什么是协议?协议是指双方或多方相互约定好,大家都需要遵守的规则,叫协议。所谓HTTP协议,就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫做HTTP协......
  • 【Java应用服务体系】「序章入门」全方位盘点和总结调优技术专题指南
    专题⽬标本系列专题的目标是希望可以帮助读者们系统和全访问掌握应⽤系统调优的思路与方案以及相关的调优工具的使用,虽然未必会覆盖目前的所有的问题场景,但是还是提供了较......